Skip to content

Instantly share code, notes, and snippets.

@ststeiger
Created June 3, 2026 14:32
Show Gist options
  • Select an option

  • Save ststeiger/dd681f945bba79b643c986513b9922dc to your computer and use it in GitHub Desktop.

Select an option

Save ststeiger/dd681f945bba79b643c986513b9922dc to your computer and use it in GitHub Desktop.
Diff table list between two MS-SQL servers
/*
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
-- WHERE TABLE_TYPE = 'VIEW'
WHERE TABLE_TYPE = 'BASE TABLE'
FOR JSON PATH;
*/
DECLARE @db1JSON nvarchar(MAX) = N'[ ... ]';
DECLARE @db2JSON nvarchar(MAX) = N'[ ... ]';
SELECT *
INTO #tables1
FROM OPENJSON(@db1JSON)
WITH
(
TABLE_SCHEMA nvarchar(128) '$.TABLE_SCHEMA'
,TABLE_NAME nvarchar(128) '$.TABLE_NAME'
);
SELECT *
INTO #tables2
FROM OPENJSON(@db2JSON)
WITH
(
TABLE_SCHEMA nvarchar(128) '$.TABLE_SCHEMA'
,TABLE_NAME nvarchar(128) '$.TABLE_NAME'
);
SELECT
COALESCE(d1.TABLE_NAME, d2.TABLE_NAME) AS TABLE_NAME
,COALESCE(d1.TABLE_SCHEMA, d2.TABLE_SCHEMA) AS TABLE_SCHEMA
,CASE
WHEN d1.TABLE_NAME IS NULL THEN '➕ Only in DB2'
WHEN d2.TABLE_NAME IS NULL THEN '➖ Only in DB1'
END AS diff_type
FROM #tables1 AS d1
FULL OUTER JOIN #tables2 AS d2
ON d1.TABLE_NAME = d2.TABLE_NAME
AND d1.TABLE_SCHEMA = d2.TABLE_SCHEMA
WHERE (1=2)
OR d1.TABLE_NAME IS NULL
OR d2.TABLE_NAME IS NULL
ORDER BY
COALESCE(d1.TABLE_NAME, d2.TABLE_NAME)
;
DROP TABLE IF EXISTS #tables1, #tables2;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment