我正在使用 SQL Server 2008 R2。
我创建了两个不同的数据库Master
和Test
。它们一开始都有相同的表和列,但后来 master
用于一些稳定的环境,而 test
则被我用于持续开发。
现在由于开发我更改了一些列的数据类型,向表中添加了一些新列,删除了一些列,添加了一些新表并删除了。现在我想让 Master
和 test
一样。我无法删除并重新创建 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 中但不存在或与测试不同。