我是新來的觸發器,並且正在設置觸發器來更新表(REQ_L
),當插入的記錄符合具體參數。在REQ_L
中更新的值是從具有匹配鍵的單獨表中提取的。T-SQL觸發器 - 使用單獨的表更新表,可以多行插入
create table REQ_L (item_number varchar(20),
commodity_code varchar(20),
vendor_id varchar(20),
item_source varchar(20));
create table XREF_C (item_number varchar(20),
commodity_code varchar(20),
xref_type varchar(20));
我想它當一個記錄插入REQ_L
的,如果滿足觸發條件將是使用ITEM_NUMBER
爲關鍵與COMMODITY_CODE
更新從REQ_L
的COMMODITY_CODE
在XREF_C
。
不再鎖定並切換到使用插入的表格。好消息是沒有更多的死鎖,壞的是它仍然沒有更新表格。更新SQL觸發器嘗試:
CREATE TRIGGER WBM
ON REQ_L
AFTER INSERT
AS
IF EXISTS (SELECT * FROM inserted WHERE VENDOR_ID = 'W7315'
AND ITEM_SOURCE = 'XML'
AND COMMODITY_CODE NOT LIKE '%-%')
BEGIN
UPDATE REQ_L
SET COMMODITY_CODE = (SELECT distinct CODE_2
FROM XREF_C xc, inserted i
WHERE i.ITEM_NUMBER = xc.CODE_1
AND xc.XREF_TYPE = 'WBM')
FROM XREF_C xc, inserted i
WHERE i.ITEM_NUMBER = xc.CODE_1
END
GO
首先,我想通過 '鎖定' 你的意思是死鎖?其次,'從XREF_C xc,REQ_L rl'是古老的古代語法。你應該使用ISO標準的JOIN語法。對這個舊語法的支持將在某個時候消失。然而,最重要的是你需要閱讀觸發器和'INSERTED'僞指令。你試圖在這裏更新整個'REQ_L'表,這幾乎可以肯定你在哪裏死鎖。 – DeanGC
「INSERT」觸發器通常引用「插入」表。在這種情況下,您可能想要將搜索限制到剛插入到'REQ_L'中的行。 REQ_L上還有一個'UPDATE'觸發器嗎?遞歸觸發器會變得討厭。 – HABO
@DeanGC,是的,它是僵局。 HABO我已經閱讀了關於「插入」表的內容,但並不完全確定他們所引用的內容。此表上沒有遞歸觸發器。 – user1435281