创建触发器时如何解决这两个错误?

时间:2011-03-11 16:33:25

标签: sql sql-server triggers

我正在创建一个简单的触发器,当表格更新或插入时会通过电子邮件发送给我:

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 = 'name@email.com',
    @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

3 个答案:

答案 0 :(得分:0)

DROP TRIGGER sportsNewsUpd后的分号?

所以...

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

答案 1 :(得分: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 = 'name@email.com',     
        @subject = 'Sports News has been altered.' 
    end 
GO

答案 2 :(得分:0)

如何运行查询?

我非常怀疑从SSMS查询窗口运行脚本会出现这些错误。此外,如果您使用sqlcmdosql运行错误,则不会收到错误。

我的意思是我怀疑你是在尝试从应用程序运行脚本,所以你可能没有意识到GO不是T-SQL的一部分。

在这种情况下,解决方案是将脚本分成两部分并依次运行每个部分。