我在表上有一个SQL触发器,插入,更新和删除后会触发。MSSQL触发器 - 问题
我将所有受影响的记录插入单独的物理表中,其中的代码定义了更新的状态。以下代码片段是定义的触发器。
CREATE TRIGGER [dbo].[DATA_CACHE]
ON [dbo].[DATA_USAGE]
for Insert,Update,Delete
AS
BEGIN
if(select COUNT(*) from inserted)>0
begin
if (select COUNT(*) from deleted)>0
BEGIN
--update
INSERT INTO CACHE_UPDATE_TABLE (CODE, ID, DATE, COUNT)
SELECT 2, ins.ID, ins.DATE, ins.COUNT
from inserted ins
END
else
begin
-- insert
INSERT INTO CACHE_UPDATE_TABLE (CODE, ID, DATE, COUNT)
SELECT 1, ins.ID, ins.DATE, ins.COUNT
from inserted ins
end
END
else
BEGIN
-- delete
INSERT INTO CACHE_UPDATE_TABLE (CODE, ID, DATE, COUNT)
SELECT 3, del.ID, del.DATE, del.COUNT
from deleted del
end
END
SELECT * FROM CACHE_UPDATE_TABLE
正如你可以在上面看到触发了我误触发后添加一个额外的语句,从目标选择表中所有的值。这个语句是在定义的触发器之后,但是当我试图改变触发器时,通过右键点击触发器并选择修改,它也向我展示了触发器结束块之后的select语句。
这是否意味着,每次触发器被触发时,这个select语句都会执行?这是我的第一个问题(问题A) - 可能是一个愚蠢的问题,但我对此有点困惑。
我的第二个问题是(问题B)我遇到了CACHE_UPDATE_TABLE锁定问题,这可能是锁定的原因吗?还有一个SQL作业每运行一分钟检查CACHE_UPDATE_TABLE表,然后执行一些操作(链接服务器相关),并在完成后从CACHE_UPDATE_TABLE删除这些记录。锁定问题可能是因为这个?如果是这样,我该如何反击呢?
我的第三个问题是(问题C)这是使用触发器执行此操作的最佳方式,还是我可以以其他方式执行此操作?触发器是否正确定义?
- 任何帮助将不胜感激...谢谢。
你有很多的问题,在那里这就是为什么你还没有收到任何答案。例如,我可以部分地回答A并完全回答C,但不是B. – OGHaza