比较表列(类型,整理,可空......)并根据发现的差异更新第二列

时间:2015-03-16 13:35:53

标签: sql-server tsql

我在同一台服务器上有两个Dbs,名为' DB_prod'和' DB_test',它们完全相同。 我需要假设有人可以在DB_prod'上修改表格。该脚本需要查找所有列差异(类型,整理,可空,最大长度)+查找新列,并将其更改为“DB_test”上的表格。 表之间没有关系。

第一步是找到差异,我知道如何做到这一点。 最重要的步骤是将所有chages移动到DB_test'。 我现在唯一的想法是使用动态sql,所以写不同的表'改变'并在游标中执行它们。

还有其他想法吗?

所有工作都需要按程序完成。

由于

1 个答案:

答案 0 :(得分:0)

数据库范围的触发器可能就是您正在寻找的内容。您可以使用它将alter table语句记录到表TriggerLog,然后运行存储过程来执行测试表上的语句。

--Table to hold your event data.
CREATE TABLE TriggerLog
(
    Event_Data NVARCHAR(MAX),
    Username NVARCHAR(250),
    Event_Date DATETIME
)

CREATE TRIGGER trg_alter_table ON DATABASE  --database level trigger
FOR ALTER_TABLE
AS
INSERT TriggerLog
  SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)'), 
        COALESCE(SUSER_SNAME(),USER_NAME()), 
        GETDATE();
GO


ALTER TABLE ProdTable
ADD column1 VARCHAR(100);

SELECT *
FROM triggerlog

结果:

            Event_data                               Username         Event_Date
------------------------------------------------------------------------------------------
ALTER TABLE ProdTable ADD column1 VARCHAR(100);     Domain\User     2015-03-16 09:29:47.387