ป้ายกำกับ: Structure

  • MSSQL: compare structure description in databases


    ตัวนี้เป็น 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 ได้ง่ายขึ้น