识别安装后对 SQL 数据库结构的更改



有时,在安装新的供应商开发时,会添加、修改或删除表。 此外,有时还会添加、修改或删除存储过程。 其中任何一个都可能包括内容更改(例如,在现有表中添加新的配置条目(。

我正在寻找一种有效的方法来跟踪安装过程中发生的这些更改,因为它们并不总是由供应商传达并导致负面的下游影响。

在SQL Server中,您可以存储包含数据库结构的不同sys表的结果。然后,在新版本发布后,您可以编写一个查询,在该查询中,您将旧的相关 sys 表完全外部联接到新的 sys 表上,并仅保留导致旧 sys 表中为 NULL 或新 sys 表中导致 NULL 的行。

旧 sys 表中的 Null 表示新版本中添加了某些内容,或者您要加入的值已更改。

新 sys 表中的 NULL 表示新版本中删除了某些内容,或者要加入的值已更改。

我假设不同的SQL版本具有类似于上述系统表的内容。

我已经使用sys.tables做了一个例子。这同样适用于列、架构、函数、过程等。 SQL小提琴

CREATE TABLE SysTablesOld (Name varchar(200));
CREATE TABLE DeleteMe (Test int);
CREATE TABLE ChangeMe (Test int);
CREATE TABLE NoChange (Test int);
INSERT INTO SysTablesOld (Name)
SELECT Name
FROM sys.tables;
-- changes in the new release
DROP TABLE DeleteMe;
CREATE TABLE AddMe (Test int);
EXEC sp_rename 'ChangeMe', 'ChangedMe'; 
SELECT 
old.Name AS Old
, new.Name AS New
FROM sys.tables AS new
FULL OUTER JOIN SysTablesOld AS old
ON old.Name = new.Name;

最新更新