更新某些数据时,如何自动生成sql更新脚本?

更新某些数据时,如何自动生成sql更新脚本?,sql,sql-server-2008,code-generation,triggers,Sql,Sql Server 2008,Code Generation,Triggers,我希望在每次修改数据库中的值时自动生成更新脚本。换言之,如果存储过程、查询或任何内容使用表c中的值b更新了列a(作为pk列i、j…k),我想生成以下内容: update c set a=b where i=... and j=... and k=... 并将其存储在某个位置,例如作为表中的原始字符串。使事情复杂化的是,我希望只有在特定用户进行了更新时才能生成脚本。 好消息是,我已经为所有表定义了主键 我可以看到如何使用触发器来实现这一点,但我需要为每个表生成特定的触发器,并在每次模式更改时更新

我希望在每次修改数据库中的值时自动生成更新脚本。换言之,如果存储过程、查询或任何内容使用表c中的值b更新了列a(作为pk列i、j…k),我想生成以下内容:

update c set a=b where i=... and j=... and k=...
并将其存储在某个位置,例如作为表中的原始字符串。使事情复杂化的是,我希望只有在特定用户进行了更新时才能生成脚本。 好消息是,我已经为所有表定义了主键

我可以看到如何使用触发器来实现这一点,但我需要为每个表生成特定的触发器,并在每次模式更改时更新它们

我想有一些内置的方法可以做到这一点,因为SQL server有时需要在使用事务复制时存储此类内容,但到目前为止找不到任何内容。。。有什么想法吗

我还对自动生成触发器的方法感兴趣,可能是使用触发器-元触发器,嗯因为我需要在模式更改时自动更新触发器

这就是为什么我要这么做。我有一个生产数据库a和一个数据仓库数据库B。我使用事务复制来保持数据库同步。我需要能够在不更新生产数据库的情况下更新数据仓库中的一些值。这适用于事务性复制,但会引发两个问题,从而导致上述问题:

我如何跟踪我所做的手动更改?我计划对生成的脚本进行源代码控制。 如果需要,如何恢复此数据库,因为创建新快照会丢失所有更新?应用自动生成的脚本解决了这个问题
与其用脚本来更新数据,为什么不存储已更改的数据呢

由触发器填充的历史记录表对此很有用,因为每次更改都会向历史记录表写入一个新行,记录更改的日期/时间以及执行更改的用户

历史记录表将与原始表相同,添加以下列。当然,使用您自己的命名约定:

update_date datetime DEFAULT CURRENT_TIMESTAMP
update_by_user varchar(100) DEFAULT SYSTEM_USER
然后在表上创建一个触发器,用于更新基表:

CREATE TRIGGER MyTable_Record_Changes
   ON MyTable
   AFTER UPDATE
AS 
BEGIN
    INSERT [MyTable_History] ([col_1], [col_2], ...)
    SELECT [col_1], [col_2], ...
    FROM deleted
END
现在,您有了对数据所做更改的完整历史记录,包括更改时间和更改人。
然后,您可以进行这些更改,并根据需要比较/更新其他数据库。

@Mitch:以上已回答。