将两个SQL Server数据库与T-sql进行比较

时间:2017-06-07 05:10:49

标签: sql sql-server tsql

考虑到我们在2年前有一个Windows应用程序的数据库,现在我们已经在数据库中改变了很多东西,所以存在差异,我们不知道有什么不同。

我不想使用像Red Gate比较工具这样的比较工具。

在新数据库中查看新列的最佳方法是什么:

查询结果如:

New Db Name | Schema | Table Name | Column Name | Default Value | IsNullable | DataType
NewDb       | dbo    | myTable    | newColumn   | ''            | No         | nvarchar(30)

谢谢

1 个答案:

答案 0 :(得分:0)

旧数据库中的列但未更改新值或默认值,可空和数据类型:

SELECT t1.*,t2.* FROM [OldDb].[INFORMATION_SCHEMA].[COLUMNS] t1
LEFT JOIN [NewDb].[INFORMATION_SCHEMA].[COLUMNS] t2
ON t1.COLUMN_NAME= t2.COLUMN_NAME
WHERE t2.COLUMN_NAME IS NULL 
or
(t1.Table_name=t2.Table_name 
AND t1.column_name = t2.column_name 
AND (t1.data_type != t2.data_type 
or t1.is_nullable != t2.is_nullable
or t1.character_maximum_length != t2.character_maximum_length
or t1.column_default != t2.column_default))
ORDER BY t1.COLUMN_NAME

新数据库中的列但不是旧的列:

您可以在查询中使用[NewDb]更改[OldDb]位置

我写了这个问题和答案,因为我需要这个,而且我花了很多时间在这上面。

所以我希望每个人都能轻松找到并使用它:)。