Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql触发器打印消息_Sql_Printing_Triggers - Fatal编程技术网

sql触发器打印消息

sql触发器打印消息,sql,printing,triggers,Sql,Printing,Triggers,我在数据库中使用触发器方面是新手,我创建了一些触发器,这些触发器对我来说非常有效,只是当我尝试创建一个触发器时,它会在删除一行后显示一条消息 我尝试使用以下代码: ALTER TRIGGER "mycustomerTrigger" AFTER delete ON customers FOR EACH ROW BEGIN ATOMIC print 'trigger is working' END 当我创建此触发器时,它不会给出错误消息,但当我删除一行时,它不会显示我打印的消息。这是因为触发器的

我在数据库中使用触发器方面是新手,我创建了一些触发器,这些触发器对我来说非常有效,只是当我尝试创建一个触发器时,它会在删除一行后显示一条消息

我尝试使用以下代码:

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

当我创建此触发器时,它不会给出错误消息,但当我删除一行时,它不会显示我打印的消息。

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

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

更多信息可在此处找到:

如果您希望以轻量级方式执行此操作,而不需要查看服务器日志、引发错误或设置特殊权限,则只需创建一个包含日志一列的表即可:

创建表日志(logstring nvarchar(max))

并按如下方式登录:

插入日志


values('hello')

如果触发器失败,日志插入是否会回滚?