2015-04-24 71 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/