【发布时间】:2015-11-29 11:02:24
【问题描述】:
当我尝试插入表时,它给出错误 SQL Server 抛出错误:
名为 mycursor 的游标不存在。
这是我的代码
ALTER TRIGGER [dbo].[tg_cr_groups]
ON [dbo].[masterheader]
AFTER insert
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
Declare @mhID tinyint
Select @mhID=masterheaderID from inserted
Declare @mhcode nvarchar(50)
Select @mhcode=masterheadercode from inserted
Declare mycrusor CURSOR FOR SELECT masterheaderID, masterheadercode FROM inserted;
open mycursor;
FETCH NEXT FROM mycursor into @mhID, @mhcode;
WHILE @@FETCH_STATUS=0
Begin
IF @mhcode='INC'
Begin
insert into groups
Values
('Groupnameone','GRP-1',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnametwo','GRP-2',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnamethree','GRP-3',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1)
End
Else IF @mhcode='EXP'
Begin
insert into groups
Values
('Groupnamefour','GRP-4',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnamefive','GRP-5',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnamesix','GRP-6',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1)
End
Else IF @mhcode='AST'
Begin
insert into groups
Values
('Groupnameseven','GRP-7',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnameeigh','GRP-8',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnamenine','GRP-9',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1)
End
Else IF @mhcode='LIB'
Begin
insert into groups
Values
('Groupnameten','GRP-10',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnameeleven','GRP-11',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1),
('Groupnametwelve','GRP-12',@mhID,1,1,1,1,1,NULL,getdate(),NULL,getdate(),1)
End
END
FETCH NEXT FROM mycursor into @mhID, @mhcode;
close mycursor;
END
【问题讨论】:
-
请:不要在触发器中使用光标!这是您可以对您的系统做的绝对最差!触发器应该小、快、灵活——光标不是这样的!避免在触发器中进行繁重的工作和大量处理 - 只需记下要做的事情 - 但实际上不要在触发器中执行那个长时间运行的进程!这将杀死您的系统性能!光标也不是必需的 - 它可能占所有情况的 95% 以上 - 绝对不是这里!
标签: sql-server triggers cursor