sql 触发打印消息
sql trigger print message
我是在数据库中使用触发器的新手,我创建了一些对我来说效果很好的触发器,除了当我尝试创建一个在删除行后显示消息的触发器时。
我尝试使用此代码:
ALTER TRIGGER "mycustomerTrigger"
AFTER delete ON customers
FOR EACH ROW
BEGIN ATOMIC
print 'trigger is working'
END
当我创建这个触发器时它没有给出错误消息,但是当我删除一行时它没有显示我打印的消息。
因为触发器的方式运行,基本上它不在你的查询执行中window。一种方法是登录到事件查看器。
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/
如果您想以不需要查看服务器日志、引发错误或设置特殊权限的轻量级方式进行操作,您只需创建一个 table 来为您的日志保留一列:
create table logs (logstring nvarchar(max))
并像这样登录:
insert into logs
values ('hello')
我是在数据库中使用触发器的新手,我创建了一些对我来说效果很好的触发器,除了当我尝试创建一个在删除行后显示消息的触发器时。
我尝试使用此代码:
ALTER TRIGGER "mycustomerTrigger"
AFTER delete ON customers
FOR EACH ROW
BEGIN ATOMIC
print 'trigger is working'
END
当我创建这个触发器时它没有给出错误消息,但是当我删除一行时它没有显示我打印的消息。
因为触发器的方式运行,基本上它不在你的查询执行中window。一种方法是登录到事件查看器。
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/
如果您想以不需要查看服务器日志、引发错误或设置特殊权限的轻量级方式进行操作,您只需创建一个 table 来为您的日志保留一列:
create table logs (logstring nvarchar(max))
并像这样登录:
insert into logs
values ('hello')