在IF OBJECT_ID中创建触发器语句(' TableName',' U'):BEGIN'附近的语法不正确。期待外在

时间:2016-06-27 14:42:04

标签: sql-server triggers database-project

编辑:我后来发现,如果使用Visual Studio DB项目,没有必要检查是否存在表,触发器等。

如何创建触发器?以下是我给出的错误:

IF OBJECT_ID('SomeSchema.tableName', 'U') IS NOT NULL
BEGIN
  CREATE TABLE SomeSchema.tableName ( ... 
  );
END
GO

IF OBJECT_ID('SomeSchema.tableName', 'U') IS NOT NULL
BEGIN
  CREATE TRIGGER [SomeSchema].[triggername] 
    ON [SomeSchema].[tableName]  
  FOR UPDATE

  AS 
  BEGIN
    IF @@ROWCOUNT = 0 RETURN   

    SET NOCOUNT ON  

    UPDATE SomeSchema.tableName
       SET SomeColumn = GETUTCDATE(),
           OtherColumn      = HOST_NAME()
      FROM SomeSchema.SomeTable INNER JOIN INSERTED ON INSERTED.ID = 
           SomeSchema.SomeTable.Id
  END
END

Error:
SQL80001: Incorrect syntax near 'BEGIN'.  Expecting EXTERNAL. 

这是在visual studio数据库项目中。不,这不是一个clr触发器。当create触发器在if语句中时,它只会给我这个错误。

1 个答案:

答案 0 :(得分:1)

我已将其更改为以下内容。这似乎有效。

如果使用数据库项目,则无需进行以下检查。我以前没有数据库项目的经验。

IF OBJECT_ID(N'triggername') IS NOT NULL
DROP TRIGGER triggername
go

CREATE TRIGGER triggername
  ON tablename
FOR UPDATE
AS 
BEGIN
  IF @@ROWCOUNT = 0 RETURN   

  SET NOCOUNT ON  

  UPDATE ...
END