我有一个后插入/更新触发器。它应该从插入的记录中获得一个字段值(让我们称之为“CurrentState”)。检查另一个表中的CurrentState值,然后为该字段查找另一个值,然后使用该值更新新添加或更新的记录。所以在记录更新之后,当前状态可能会更新多次。 SQL是否支持嵌套更新触发器?实际上它现在不起作用,我没有在我的代码中发现任何错误。所以我对sql支持感到怀疑。如何在sql中嵌套触发器?
这里是我的代码
create TRIGGER [dbo].[ASI_trigBPMIAutomaticState]
ON [dbo].[ASI_TblBPMForm]
AFTER INSERT, Update
AS
BEGIN
select @CurrentState = CurrentState from inserted;
select @FormID = FormID from inserted;
DECLARE curflow CURSOR
LOCAL SCROLL STATIC
for select w.WorkflowID
from ASI_TblBPMWorkflow w
where w.FromState = @CurrentState
OPEN curflow
FETCH first FROM curflow
INTO @WorkflowID
WHILE @@FETCH_STATUS = 0
BEGIN
select @ToState = StateID
from TblStates
where r.ResponseID = @WorkflowID
if (@ToState =1)
breake;
FETCH next FROM curflow
INTO @WorkflowID
END -- While Cursor
CLOSE curflow
DEALLOCATE curflow
if (@QID > 0)
begin
update ASI_TblBPMForm
set CurrentState = @ToState
where FormID = @FormID
end;
end
http://technet.microsoft.com/en-us/library/ms190739.aspx –
你假设这个触发器是每行调用一次** - 这是** NOT **酪蛋白SQL Server 。该触发器在每个语句**中调用**一次,如果该语句插入或更新多行,则“插入”将包含多行,而您从选择的“select @CurrentState = CurrentState”会任意选择其中一行并忽略所有其他)。另外:在触发器内部有一个**光标**是关于从性能角度来看可以做的最差的事情! –
假设你的'sql'(这只是结构化的查询语言 - 没有更多),但你真的可能意味着'sql-server'(Microsoft关系数据库产品) - 正确吗?相应更新您的标签 –