2015-04-24 75 views
2

我是使用数据库中的触发器的新手,我创建了一些触发器,对我来说工作得非常好,除了当我尝试创建一个触发器,它将在删除行后显示一条消息。sql触发器打印消息

我尝试使用此代码:当我创造了这个触发它没有给出错误信息

ALTER TRIGGER "mycustomerTrigger" 
AFTER delete ON customers 
FOR EACH ROW 
BEGIN ATOMIC 
print 'trigger is working' 
END 

,但是当我删除一行,并不表明我打印的消息。

回答

4

这是因为触发器运行的方式,基本上它不在您的查询执行窗口中。执行此操作的一种方法是登录到事件查看器。

Create trigger TestTrigger on 
tablefortrigger 
for insert 
as 
–Declare variable to hold message 
Declare @Msg varchar(8000) 
–Assign to message “Action/Table Name/Time Date/Fields inserted 
set @Msg = ‘Inserted | tablefortrigger | ‘ + convert(varchar(20), getdate()) + ‘ | ‘ 
+(select convert(varchar(5), track) 
+ ‘, ‘ + lastname + ‘, ‘ + firstname 
from inserted) 
–Raise Error to send to Event Viewer 
raiserror(50005, 10, 1, @Msg) 

这样做的另一种方式是写一个文件,还有当然是权限问题在这里,但你可以这样做:

Alter trigger TestTrigger on 
tablefortrigger 
for insert 
as 
Declare @Msg varchar(1000) 
–Will hold the command to be executed by xp_cmdshell 
Declare @CmdString varchar (2000) 
set @Msg = ‘Inserted | tablefortrigger | ‘ + convert(varchar(20), getdate()) + ‘ — ‘ 
+(select convert(varchar(5), track) 
+ ‘, ‘ + lastname + ‘, ‘ + firstname 
from inserted) 
–Raise Error to send to Event Viewer 
raiserror(50005, 10, 1, @Msg) 
set @CmdString = ‘echo ‘ + @Msg + ‘ >> C:logtest.log’ 
–write to text file 
exec master.dbo.xp_cmdshell @CmdString 

更多信息可以在这里找到:http://www.sql-server-performance.com/2005/log-file-trigger/