我創建了一個觸發如下:觸發防止柱被更新
CREATE TRIGGER InsertUpdateATLastViewedMatch
ON dbo.AT_LastViewedMatch
FOR INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- update statements for trigger here
declare @id1 int, @matchFK int;
select @id1 = i.id from inserted i;
select @matchFK=i.AT_MatchFk from inserted i;
update dbo.AT_LastViewedMatch set matchId = @matchFK where id = @id1;
END
GO
雖然這觸發工程─我不能夠直接從SQLManager更新matchId列的值:
如果我執行
UPDATE AT_LastViewedMatch set matchId='1179619' where id=5762
例如,我仍然看到matchId的舊值。我認爲這個問題與上面的觸發器有關(因爲如果我放棄觸發器,它會起作用)。有沒有辦法讓這個過去?
您是否希望能夠更新該值?當SSMS是客戶端時,您不能運行觸發器*僅* * – Blorgbeard
您的**主要缺陷**是您似乎認爲觸發器每行調用**一次** - 這是** NOT ** SQL Server的情況。如果您的INSERT或UPDATE影響多行,則觸發器將在每個語句**中調用一次**,並且僞表「Inserted」和「Deleted」可以包含多行。那麼當你從插入的i中選擇@ id1 = i.id時,你選擇了哪些行?它沒有被定義 - 你得到**一個,任意**行和所有其他被忽略....你需要重新編寫你的觸發器來處理**多行**在'插入'和'刪除'! –
感謝您的回答。我修復了觸發器以解決更新的多行問題。 實際上,我只是希望在更新AT_matchFk列而不是matchId列時激發觸發器。 同時,我想更新獨立於AT_matchFk列的matchId列(我不希望觸發器觸發)。這是可能的 –