【问题标题】:create trigger using a stored procedure使用存储过程创建触发器
【发布时间】:2012-02-21 01:22:04
【问题描述】:

我有一个触发器,我想从存储过程中启动它。我正在使用 ms 访问,当我从 ms 访问运行触发器时,它给了我一个错误消息 (ODBC)。我想我无法使用 ms 访问创建触发器。这是我的触发器:

IF EXISTS 
(SELECT name 
FROM sys.objects 
WHERE name = 'UpdateComments' AND type = 'TR')
DROP TRIGGER tblEmailHdr_abenit01.UpdateComments; 
GO 
CREATE TRIGGER UpdateComments 
ON tblEmailHdr_abenit01 
AFTER Update 
AS 
IF ( UPDATE (Comments) ) BEGIN Update ttblEmailHdr_abenit01 
Set UpdateComm = GetDate() 
END;
GO

这就是我尝试从存储过程创建触发器的方式,但是当我尝试创建存储过程时收到以下错误消息:

存储过程:

CREATE PROCEDURE dbo.SP_AS_tblEmailHdr_Trig (@UserID as varchar(10)) 
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 --SET NOCOUNT ON;

-- Insert statements for procedure here
 Declare @UserTable Varchar(50)
 Declare @UserTable2 Varchar(50)

 Set @UserTable = 'tblEmailHdr_' + @UserID ;
 Set @UserTable2 = 'tblEmailHdr_' + @UserID + '.UpdateComments' ;

IF EXISTS 
 (SELECT name 
 FROM sys.objects 
 WHERE name = 'UpdateComments' AND type = 'TR') DROP TRIGGER @UserTable2   

 GO
 CREATE TRIGGER UpdateComments 
 ON @UserTable 
 AFTER UPDATE 
 AS 
 IF ( UPDATE (Comments) )
 BEGIN
  --RAISERROR (50009, 16, 10)
  Update @UserTable 
  Set UpdatedComm = GetDate() 
 END
 GO

END

GO

我得到的错误信息:

Msg 102, Level 15, State 1, Procedure SP_AS_tblEmailHdr_Trig, Line 23
Incorrect syntax near '@UserTable2'.
Msg 102, Level 15, State 1, Procedure UpdateComments, Line 2
Incorrect syntax near '@UserTable'.
Msg 1087, Level 15, State 2, Procedure UpdateComments, Line 8
Must declare the table variable "@UserTable".
Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'END'.

【问题讨论】:

  • 从sp里面移除GO
  • @Vikram GO 可能会阻止创建过程,但它仍然不会导致触发器被执行,因为 OP 似乎想要。
  • @Yuck:你是对的。触发器会自动执行..但我认为他正在尝试创建一个。
  • 我认为您的问题表述有误,或者误解了触发器的功能。

标签: sql ms-access stored-procedures triggers


【解决方案1】:
create procedure pro (parameters)
as
begin
  declare @trigs nvarchar(max)
  declare @trip nvarchar(max)
  set @trigs='
    create trigger tri on dbo.employee
    for insert
    as
      select * from inserted
    go'
  set @trip='drop trigger tri'

  EXEC sp_executeSQL @trigs

  insert into employee values(parameters)

  EXEC sp_executeSQL @trip
end

exec pro param
eg:
exec pro 80,'aaa','AAS',25000,'2013-02-01','iT'

【讨论】:

    【解决方案2】:

    从过程中删除所有 GO 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 2021-07-13
      • 1970-01-01
      • 2011-04-15
      • 2019-06-24
      • 2018-01-18
      • 2013-09-12
      相关资源
      最近更新 更多