【发布时间】:2014-09-17 16:11:37
【问题描述】:
触发器的新手并试图弄清楚为什么此触发器末尾的嵌套IF 似乎不是递归的。我想要的是它一次又一次地触发自己,直到它达到 4 的@ProcessStatus。它只达到 1。不太清楚为什么,有什么建议吗?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_ProcessRecord] ON [dbo].[_ShipMain]
FOR UPDATE
AS
BEGIN TRANSACTION
declare @cqID nvarchar(24),
@carrier nvarchar(24),
@shipCode nvarchar(24),
@Note nvarchar(255),
@ProcessStatus nvarchar(24);
SELECT @cqID = i.ConnectQueryID from inserted i;
SELECT @carrier = i.Carrier from inserted i;
SELECT @shipCode = i.ShipCode from inserted i;
SELECT @ProcessStatus = i.Status from inserted i;
SELECT @Note = 'ID: ' + @cqID + ' ' +
'Carrier: ' + ' ' + convert(nvarchar(24), @carrier) + ' ' +
'Ship Code: ' + @shipCode + ' ' +
(SELECT CASE @ProcessStatus
WHEN 0 THEN 'Recieved'
WHEN 1 THEN 'Processing'
WHEN 2 THEN 'More Processing'
WHEN 3 THEN 'Finishing'
WHEN 4 THEN 'Processed'
END);
INSERT INTO [_ShipLog]
SELECT @cqID
,GETDATE()
,@Note
,@ProcessStatus
IF @ProcessStatus = 0
BEGIN
UPDATE [_ShipMain]
SET [Status] = @ProcessStatus + 1
WHERE [ConnectQueryID] = @cqID;
END
IF @ProcessStatus = 1
BEGIN
UPDATE [_ShipMain]
SET [Status] = @ProcessStatus + 1
WHERE [ConnectQueryID] = @cqID;
END
IF @ProcessStatus = 2
BEGIN
UPDATE [_ShipMain]
SET [Status] = @ProcessStatus + 1
WHERE [ConnectQueryID] = @cqID;
END
IF @ProcessStatus = 3
BEGIN
UPDATE [_ShipMain]
SET [Status] = @ProcessStatus + 1
WHERE [ConnectQueryID] = @cqID;
END
COMMIT TRANSACTION
【问题讨论】:
-
您希望触发器是递归的?检查
RECURSIVE_TRIGGERS数据库设置。
标签: sql sql-server-2008 tsql recursion triggers