我在同一台服务器上有两个Dbs,名为' DB_prod'和' DB_test',它们完全相同。 我需要假设有人可以在DB_prod'上修改表格。该脚本需要查找所有列差异(类型,整理,可空,最大长度)+查找新列,并将其更改为“DB_test”上的表格。 表之间没有关系。
第一步是找到差异,我知道如何做到这一点。 最重要的步骤是将所有chages移动到DB_test'。 我现在唯一的想法是使用动态sql,所以写不同的表'改变'并在游标中执行它们。
还有其他想法吗?
所有工作都需要按程序完成。
由于
答案 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