我是T-SQL觸發器的新手。我在表上執行一些觸發器,每次插入,更新和刪除進程表觸發器開始。T-SQL @@ FETCH不檢索多重刪除的最後一個值(插入或更新)
當一個刪除命令運行時,它可以正常工作,但是當一個sql命令內發生多重刪除時,它不會檢索最後刪除的行的id(顯示先前刪除的行id)。
例如,當我刪除4行與SQL命令,PRINT(觸發器)示出了ID的是這樣的:
-Value 1 (First deleted row id)
-Value 2 (Second deleted row id)
-Value 3 (Third deleted row id)
-Value 3 (**WRONG!!!** Again, Third deleted row id)(Should see last row id here)
這裏是刪除觸發器:
ALTER TRIGGER [dbo].[TRG_GD_GREENRAIN_CODES_LOG_DELETE]
ON [dbo].[GD_GREENRAIN_CODES]
AFTER DELETE
AS
DECLARE @CODEID uniqueidentifier;
DECLARE @COUNT int;
SET @COUNT=(SELECT count(1) FROM deleted);
DECLARE contact_cursor CURSOR FOR
SELECT T.CODEID FROM deleted T
set NOCOUNT ON
OPEN contact_cursor;
FETCH NEXT FROM contact_cursor
INTO @CODEID;
WHILE @@FETCH_STATUS = 0
BEGIN
SET NOCOUNT ON
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
INTO @CODEID;
PRINT @CODEID
EXEC [dbo].[SP_GD_GREENRAIN_CODES] @CODEID,NULL,NULL,'D'
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
給出的答案是正確的。我只是有一個問題,爲什麼你在觸發器中使用光標?什麼是「SP_GD_GREENRAIN_CODES」呢?並且兩次調用SET NOCOUNT ON並不是必須的。一旦足夠 – Jaques 2014-11-25 09:06:43
SP_GD_GREENRAIN_CODES是獲取Action參數(更新,刪除,插入)和一些其他參數(如ID,DESC等)的存儲過程,用於在特定表上運行I,U,D進程。 – balron 2014-11-25 09:41:22