我在表上有一個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