每次在数据库中修改值时,我都想自动生成更新脚本。换句话说,如果存储过程,或查询,或任何更新列a表c中的值b(作为pk列(i,j ... k)),我想生成这个:
update c set a=b where i=... and j=... and k=...
并将其存储在某处(例如,作为表中的原始字符串)。更复杂的是,我希望只有在特定用户进行更新时才会生成脚本。 好消息是我已经为我的所有表定义了一个主键。
我可以看到如何使用触发器执行此操作,但我需要为每个表生成特定的触发器,并且每次我的架构更改时都要更新它们。
我想有一些内置方法可以做到这一点,因为SQL服务器有时需要存储这类东西(例如使用事务复制),但到目前为止找不到任何东西......任何想法?< / p>
我也对自动生成触发器的方法感兴趣(可能使用触发器 - 元触发器,是吗? - 因为我需要在架构更改时自动更新触发器)
这就是我想要这样做的原因。我有一个生产数据库A和一个数据仓库数据库B.我正在使用事务复制来保持数据库同步。我需要能够在不更新生产数据库的情况下更新数据仓库中的某些值。这适用于事务复制,但引发了两个问题,这导致了上述问题:
答案 0 :(得分:0)
为什么不存储已更改的数据,而不是考虑更新数据的脚本?
由触发器填充的历史记录表对此有好处,因为每次更改都会将新行写入记录更改日期/时间的历史记录表以及执行更改的用户。
历史表将与原始表相同,并添加以下列(当然,使用您自己的命名约定):
update_date datetime DEFAULT CURRENT_TIMESTAMP
update_by_user varchar(100) DEFAULT SYSTEM_USER
然后在表上为基表创建UPDATE的触发器:
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
现在,您可以获得有关数据更改的完整历史记录,包括何时以及由谁进行更改。 然后,您可以根据需要进行这些更改并比较/更新其他数据库。