SQL Server 2008比较两个不同的数据库表的列名,数据类型和长度

Dev*_*Dev 2 sql sql-server-2008

我正在使用SQL Server 2008 R2.

我创建了两个不同的数据库MasterTest.它们在开始时都具有相同的表和列,但随后master用于某些稳定的环境,test并由我用于持续开发.

现在由于开发,我更改了一些列的数据类型,向表中添加了一些新列,删除了一些列,添加了一些新表并删除了.现在我想做Master同样的事情test.我无法删除并重新创建,Master因为它包含一些敏感的实时数据.所以,我需要每一个表比较mastertest同列名,数据类型,约束和长度一起.有什么解决方案吗?

Dev*_*Dev 7

解决了我自己:

SELECT  
    T.[name] AS [table_name], AC.[name] AS [column_name],  
        TY.[name] AS system_data_type
FROM    [master].sys.[tables] AS T  
    INNER JOIN [master].sys.[all_columns] AC ON T.[object_id] = AC.[object_id] 
    INNER JOIN [master].sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id]

EXCEPT

SELECT  
    T.[name] AS [table_name], AC.[name] AS [column_name],  
        TY.[name] AS system_data_type
FROM    test.sys.[tables] AS T  
    INNER JOIN test.sys.[all_columns] AC ON T.[object_id] = AC.[object_id] 
    INNER JOIN test.sys.[types] TY ON AC.[system_type_id] = TY.[system_type_id]
Run Code Online (Sandbox Code Playgroud)

这将为您提供列的列表以及表名,列名和数据类型,这些列在主服务器中但不存在或与测试不同.