Sql 使用存储过程创建触发器
我有一个触发器,我想从存储过程中启动它。我正在使用ms access,当我从ms access运行触发器时,它会给我一个错误消息(ODBC)。我想我无法使用ms access创建触发器。这是我的触发器:Sql 使用存储过程创建触发器,sql,ms-access,stored-procedures,triggers,Sql,Ms Access,Stored Procedures,Triggers,我有一个触发器,我想从存储过程中启动它。我正在使用ms access,当我从ms access运行触发器时,它会给我一个错误消息(ODBC)。我想我无法使用ms access创建触发器。这是我的触发器: IF EXISTS (SELECT name FROM sys.objects WHERE name = 'UpdateComments' AND type = 'TR') DROP TRIGGER tblEmailHdr_abenit01.UpdateComments; GO CRE
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'.
从过程内部删除所有GO语句。从过程内部删除GO语句sp@Vikram
GO
可能会阻止创建过程,但它仍然不会导致触发器按照OP的要求执行。@yack:你说得对。触发器将自动执行。。但我认为他是在试图创造一个。我认为你的问题措辞不正确,或者误解了触发器的功能。
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'