我對觸發器沒有太多經驗,但我最近開始玩它們。我創建了一個看起來像這樣的觸發器。我在 Azure Data Studio 中作業,我驚訝地發現我的列印陳述句和受影響的行數似乎出現在實際插入/更新受影響的行訊息之前。誰能解釋為什么會這樣?由于它是一個“AFTER”觸發器,我希望首先看到為初始插入/更新更新的 # 行陳述句,然后是我的觸發器的列印陳述句。
create TRIGGER [dbo].[trig_trimField] ON [dbo].[mytable]
AFTER INSERT, UPDATE
AS
print '[dbo].[trig_trimField]'
IF UPDATE (myField)
BEGIN
declare @issueCount int
Select @issueCount = count(*)
from inserted
where len(myField 'x')-1 <> len(rtrim(ltrim(myField)))
print 'myField(s) to fix: ' cast(@issueCount as varchar)
IF @issueCount > 0
BEGIN
UPDATE [dbo].[mytable]
SET myField = rtrim(ltrim(myField))
WHERE ID IN (
SELECT ID
FROM inserted
WHERE len(myField 'x')-1 <> len(rtrim(ltrim(myField)))
)
END
END
GO
測驗代碼
insert into [dbo].[mytable] ([myField])
SELECT case
when ID = 1 then [myField] ' '
when ID = 2 then ' ' myField
else myField
end
FROM [dbo].[mytable]
WHERE ID in (1,2,3)
輸出
[dbo].[trig_trimField]
myField(s) to fix: 2
(2 rows affected)
(3 rows affected)
uj5u.com熱心網友回復:
觸發器發生在對目標表進行更改之后,但在同一個事務中,并且在 DML 的成功或失敗報告給客戶端之前。
觸發器可以拋出、引發錯誤或回滾以撤消更改,在這種情況下,客戶端不應看到攜帶行數的 DONE/DONEINPROC 訊息,而應該只收到錯誤訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443772.html
