我正在使用 SQL Server 2008 R2。

我创建了两个不同的数据库MasterTest。它们一开始都有相同的表和列,但后来 master 用于一些稳定的环境,而 test 则被我用于持续开发。

现在由于开发我更改了一些列的数据类型,向表中添加了一些新列,删除了一些列,添加了一些新表并删除了。现在我想让 Mastertest 一样。我无法删除并重新创建 Master,因为它包含一些敏感的实时数据。因此,我需要将 master 的每个表与 test 以及列名、数据类型、约束和长度进行比较。有什么解决办法吗?

请您参考如下方法:

我自己解决了:

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] 

这将为您提供列列表以及表名称、列名称和数据类型,这些列在 master 中但不存在或与测试不同。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!