2013-10-15 319 views
0

我試圖運行插入觸發器後,但它不工作,有沒有辦法看到它的日誌?插入觸發器不工作後

這裏是我的代碼

ALTER TRIGGER [dbo].[SUBSID_INSERT] on [dbo].[STUDENT_MASTER] AFTER INSERT AS 
BEGIN 
SET NOCOUNT ON 
DECLARE @numrows int, @hostname char(30), @sysuser char(30); 

SELECT @numrows = @@rowcount; 
IF @numrows = 0 RETURN; 

SELECT @hostname = substring(hostname, 1, 30) 
FROM master.dbo.sysprocesses 
WHERE spid = @@spid; 

SELECT @sysuser = substring(system_user, 1, 30); 

INSERT INTO insert statement, 


FROM STUDENT_MASTER JOIN INSERTED I ON STUDENT_MASTER.ID_NUM = I.ID_NUM 
JOIN NAME_MASTER ON NAME_MASTER.ID_NUM = STUDENT_MASTER.ID_NUM 


WHERE 
STUDENT_MASTER.id_num not in (select DISTINCT id_num from subsid_master where subsid_cde LIKE '0%') 

END 

GO 
+3

*不起作用* - 如何!?!?! (a)不做任何事情嗎? (b)拋出一個錯誤? (c)做錯了什麼? –

+0

什麼都沒有,就像參數返回0行一樣,但是如果我運行腳本,它會執行插入操作。 –

+0

什麼是「插入插入語句」,?觸發器是否與此相配... – bsivel

回答

4

您聲明一個變量後檢查@@ROWCOUNT。這將始終顯示最後一條語句的結果(在本例中爲0),所以請停止執行此操作。取而代之的只是使用:

SELECT @numrows = COUNT(*) FROM inserted; 

我看到很多其他潛在的改進,但這正是爲什麼它目前似乎是「不工作」。

+0

+1:@AaronBertrand,你的回答顯然是正確的,但我想知道這個檢查是否有必要?如果「插入」表爲空,會觸發'AFTER INSERT'觸發嗎? –