Home Forums SQL Server 2005 T-SQL (SS2K5) Compare Table structure in two databases in sql server 2005 RE: Compare Table structure in two databases in sql server 2005

  • These are what I use: the first script is for tables, the second one - for indexes:

    WITH old_columns AS(SELECT t.name as table_name,

    t.max_column_id_used,

    c.name as column_name,

    c.column_id,

    c.system_type_id,

    c.max_length

    FROM OLD_DB.sys.columns c

    JOIN OLD_DB.sys.tables t

    ON t.object_id = c.object_id

    WHERE t.type_desc = 'USER_TABLE'

    AND t.type = 'U'),

    new_columns AS(SELECT t.name as table_name,

    t.max_column_id_used,

    c.name as column_name,

    c.column_id,

    c.system_type_id,

    c.max_length

    FROM NEW_DB.sys.columns c

    JOIN NEW_DB.sys.tables t

    ON t.object_id = c.object_id

    WHERE t.type_desc = 'USER_TABLE'

    AND t.type = 'U')

    SELECT *

    FROM new_columns g

    WHERE NOT EXISTS (SELECT 1

    FROM old_columns b

    WHERE b.table_name = g.table_name

    AND b.column_name= g.column_name);

    WITH old_indexes AS (

    SELECT tab.name AS table_name,

    idx.name AS index_name,

    idx.index_id,

    idx.type AS index_type,

    idx.type_desc AS index_type_desc,

    idx.is_unique,

    idx.is_unique_constraint,

    idx.fill_factor,

    idx.allow_row_locks,

    idx.allow_page_locks

    FROM OLD_DB.sys.indexes idx

    JOIN OLD_DB.sys.tables tab

    ON tab.object_id = idx.object_id

    WHERE tab.type_desc = 'USER_TABLE'

    AND tab.type = 'U'

    AND idx.name IS NOT NULL),

    new_indexes AS (

    SELECT tab.name AS table_name,

    idx.name AS index_name,

    idx.index_id,

    idx.type AS index_type,

    idx.type_desc AS index_type_desc,

    idx.is_unique,

    idx.is_unique_constraint,

    idx.fill_factor,

    idx.allow_row_locks,

    idx.allow_page_locks

    FROM NEW_DB.sys.indexes idx

    JOIN NEW_DB.sys.tables tab

    ON tab.object_id = idx.object_id

    WHERE tab.type_desc = 'USER_TABLE'

    AND tab.type = 'U'

    AND idx.name IS NOT NULL)

    SELECT mbs.*

    FROM new_indexes mbs

    WHERE NOT EXISTS (SELECT 1

    FROM old_indexes el

    WHERE el.table_name = mbs.table_name

    AND el.index_name = mbs.index_name

    AND el.index_type = mbs.index_type

    AND el.index_type_desc = mbs.index_type_desc

    AND el.is_unique = mbs.is_unique

    AND el.is_unique_constraint = mbs.is_unique_constraint

    AND el.fill_factor = mbs.fill_factor);