我试图弄清楚如何确定某个表是否受到顺序运行的多个进程的影响,并且需要知道每次运行之前和之后表的状态。我一直尝试做的是在所有进程运行之前运行一些SQL,它将db中每个表的校验和保存到表中,然后在每个表结束时再次运行它并使用after checksum更新表行。在所有过程结束后,我比较校验和并获得所有行之前<>后。
唯一的问题是我不是SQL的最佳人选,而且有点迷失。我现在就在这里:
select checksum_agg(binary_checksum(*)) from empcomp with (nolock)
create table Test_CheckSum_Record ( TableName varchar(max), CheckSum_Before int, CheckSum_After int)
SELECT name into #TempNames
FROM sys.Tables where is_ms_shipped = 0
我想要做的伪代码就像
foreach(var name in #TempNames)
insert into Test_CheckSum_Record(name, ExecuteSQL N'select checksum_agg(binary_checksum(*)) from ' + name + ' with (nolock)', null)
但是如何做到这一点?
答案 0 :(得分:0)
根据评论判断,您需要创建一个触发器来处理所有CRUD操作并只放置一个标志
语法是
Create TRIGGER [TriggerName] ON [TableName]
AFTER UPDATE, AFTER Delete, AFTER UPDATE
在触发器中你可以做
select CHECKSUM_AGG([Columns you want to compare against])
from [ParentTable]
将该值存储在变量中,并在列之前根据校验和表进行检查。如果它不存在,则添加一个新条目,其中DELETED
表checksum_AGG值为前一个条目
请注意,选择不使用插入的表格只是我对计算列的偏好
稍后当我有更多时间添加代码时,我会进行编辑