2015-04-24 2 views
2

Я новичок в использовании триггеров в базе данных, и я создал несколько триггеров, которые очень хорошо работали для меня, за исключением того, что когда я попытался создать триггер, который покажет сообщение после удаления строки.sql trigger print message

Я попытался с помощью этого кода:

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/