2

我正在使用 SQL Server 2008 R2。

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

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

4

2 回答 2

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]

这将为您提供列的列表以及表名、列名和数据类型,它们在主目录中但不存在或与测试不同。

于 2012-06-29T07:16:29.870 回答
0

你做过搜索吗?

http://www.codeproject.com/Articles/205011/SQL-Server-Database-Comparison-Tool

于 2012-06-27T07:26:25.613 回答