ตัวนี้เป็น version ที่เพิ่มความสามารถให้ตรวจสอบ description เพิ่มขึ้นมาจาก MSSQL: compare column in table databases โดนเพิ่ม description, naming ขึ้นมา
compare_structure_in_databases_v.2_description.sql
-- Declare variables for the database names DECLARE @db1 NVARCHAR (128) = 'DB_DEV'; DECLARE @db2 NVARCHAR (128) = 'DB_QA'; -- Use dynamic SQL to build the query DECLARE @sql NVARCHAR (MAX) ; SET @sql = N' -- CTE 1: Get all column descriptions from Database 1 (@db1) WITH Descriptions_DB1 AS (SELECT s.name AS TableSchema, t.name AS TableName, c.name AS ColumnName, CAST (p.value AS NVARCHAR (MAX)) AS Description -- Description is stored as the value of the Extended Property FROM ' + QUOTENAME (@db1) + '.sys.columns c JOIN ' + QUOTENAME (@db1) + '.sys.tables t ON t.object_id = c.object_id JOIN ' + QUOTENAME (@db1) + '.sys.schemas s ON s.schema_id = t.schema_id LEFT JOIN ' + QUOTENAME (@db1) + '.sys.extended_properties p -- Join on major_id (Table ID) and minor_id (Column ID) ON p.major_id = t.object_id AND p.minor_id = c.column_id AND p.class_desc = ''OBJECT_OR_COLUMN'' -- Ensure it is a column property AND p.name = ''MS_Description'' -- Filter for the standard description property name) , -- CTE 2: Get all column descriptions from Database 2 (@db2) Descriptions_DB2 AS (SELECT s.name AS TableSchema, t.name AS TableName, c.name AS ColumnName, CAST (p.value AS NVARCHAR (MAX)) AS Description FROM ' + QUOTENAME (@db2) + '.sys.columns c JOIN ' + QUOTENAME (@db2) + '.sys.tables t ON t.object_id = c.object_id JOIN ' + QUOTENAME (@db2) + '.sys.schemas s ON s.schema_id = t.schema_id LEFT JOIN ' + QUOTENAME (@db2) + '.sys.extended_properties p ON p.major_id = t.object_id AND p.minor_id = c.column_id AND p.class_desc = ''OBJECT_OR_COLUMN'' AND p.name = ''MS_Description'') -- Perform a FULL OUTER JOIN to find differences SELECT ISNULL (d1.TableSchema, d2.TableSchema) AS TableSchema, ISNULL (d1.TableName, d2.TableName) AS TableName, ISNULL (d1.ColumnName, d2.ColumnName) AS ColumnName, CASE WHEN d1.Description IS NULL AND d2.Description IS NOT NULL THEN ''Missing Description in ' + QUOTENAME (@db1) + ''' WHEN d1.Description IS NOT NULL AND d2.Description IS NULL THEN ''Missing Description in ' + QUOTENAME (@db2) + ''' WHEN d1.Description <> d2.Description THEN ''Description Mismatch'' ELSE ''No Difference Found'' -- Should be filtered out by the WHERE clause END AS DifferenceType, d1.Description AS ' + QUOTENAME (@db1 + '_Description') + N', -- FIX: Comma added to the dynamic string d2.Description AS ' + QUOTENAME (@db2 + '_Description') + N' FROM Descriptions_DB1 d1 FULL OUTER JOIN Descriptions_DB2 d2 ON d1.TableSchema = d2.TableSchema AND d1.TableName = d2.TableName AND d1.ColumnName = d2.ColumnName -- Filter for actual differences in the Description value -- We use ISNULL with a unique placeholder (N''NULL_PLACEHOLDER_42'') to correctly handle -- NULL vs NOT-NULL and direct Mismatch comparisons in a single, robust condition. WHERE ISNULL (d1.Description, N''NULL_PLACEHOLDER_42'') <> ISNULL (d2.Description, N''NULL_PLACEHOLDER_42'') ORDER BY TableSchema, TableName, ColumnName; '; -- Execute the dynamic SQL EXEC sp_executesql @sql;
version นี้เพิ่มการตรวจสอบ description ขึ้นมาเพิ่อช่วยในการ nameimg ได้ง่ายขึ้น