2011-03-11 53 views
1

我創建一個簡單的觸發器,當表被更新或插入,將發郵件給我:如何在創建觸發器時解決這兩個錯誤?

IF EXISTS (SELECT name FROM sysobjects 
     WHERE name = 'sportsNewsUpd' AND type = 'TR') 
    DROP TRIGGER sportsNewsUpd 
GO 

CREATE TRIGGER sportsNewsUpd 
ON sportsNews 
FOR Insert, UPDATE 
AS 
    EXEC master.webdb.xp_sendmail 
    @recipients = '[email protected]', 
    @subject = 'Sports News has been altered.' 
GO 

我得到兩個錯誤: 附近有語法錯誤「GO」,「CREATE TRIGGER」必須查詢批處理中的第一個表達式,'GO'附近的語法錯誤。 (兩個'GO',兩個錯誤)。

我的資源: http://msdn.microsoft.com/en-us/library/aa258254(v=sql.80).aspx(在例子B.) http://msdn.microsoft.com/en-us/library/ms189505.aspx

+0

我使用 「Microsoft SQL Server管理Studio Express的」 – dcp3450 2011-03-11 16:35:39

+0

@JNK - 你是怎麼修改? – dcp3450 2011-03-11 16:45:55

+0

增加了'sql-server'標籤來清楚你所使用的RDBMS。 – JNK 2011-03-11 16:46:24

回答

0

分號DROP TRIGGER sportsNewsUpd後?

所以......

IF EXISTS (SELECT name FROM sysobjects 
    WHERE name = 'sportsNewsUpd' AND type = 'TR') 
DROP TRIGGER sportsNewsUpd; 
GO 
+0

我仍然在EXEC master.webdb.xp_sendmail @recipients ='[email protected]', @subject ='體育新聞已被修改'中得到錯誤 – dcp3450 2011-03-11 16:48:23

+0

分號。 – 2011-03-11 16:49:21

+0

仍然得到同樣的錯誤 – dcp3450 2011-03-11 16:52:42

0

嘗試:

IF EXISTS (SELECT name FROM sysobjects 
      WHERE name = 'sportsNewsUpd' AND type = 'TR') 
begin 
    DROP TRIGGER sportsNewsUpd 
end 
GO 

CREATE TRIGGER sportsNewsUpd ON sportsNews FOR Insert, UPDATE AS 
    begin  
     EXEC master.webdb.xp_sendmail  
     @recipients = '[email protected]',  
     @subject = 'Sports News has been altered.' 
    end 
GO 
0

你如何運行查詢(IES)?

我很懷疑你會得到從SSMS查詢窗口中運行該腳本這些錯誤。另外,如果你使用sqlcmdosql運行它,你不會得到錯誤。

我的意思是我懷疑你正試圖從應用程序運行腳本,所以你可能不知道GO不是T-SQL的一部分。

解決方案在這種情況下將一分爲二的腳本並運行依次在每個部分。

+0

代碼粘貼到您的SSMS窗口並點擊「解析」(checlmark)工具欄圖標,就會得到錯誤信息。 – RacerX 2011-03-11 20:32:34

+0

@RacerX:'命令(s)completed successfully',SSMS(SQL Server 2008 R2)說。 – 2011-03-11 20:41:44