Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在IF对象ID(';TableName';,';U';)内创建触发器语句:';开始';。期待外部_Sql Server_Triggers_Database Project - Fatal编程技术网

Sql server 在IF对象ID(';TableName';,';U';)内创建触发器语句:';开始';。期待外部

Sql server 在IF对象ID(';TableName';,';U';)内创建触发器语句:';开始';。期待外部,sql-server,triggers,database-project,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 C

编辑:我后来发现,如果使用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. 

这在VisualStudio数据库项目中。不,这不是clr触发器。只有当create触发器位于if语句中时,才会出现此错误。

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

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

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

如果这是一个clr触发器,请发布整个代码谷歌搜索错误文本显示至少2个不同的错误原因。我们需要看更多的代码。问题出在开始和结束之间的4个点之一。要获得更详细的信息,您需要放大这些点,以便我们可以阅读其中的内容……@GuidoG绝对正确!如果-:“CREATE TRIGGER必须是批处理中的第一条语句…”为什么要检查是否存在,则它不能包含在
中?DB/SQL项目的全部要点是将您的项目与数据库进行比较,并使它们保持同步。如果触发器不存在,它将被创建-您不必添加额外的代码来检查它。如果它确实存在,将根据需要对其进行修改以使其同步。谢谢,我以前没有db项目的经验,而且我只是最近才了解它的工作原理。这可能会有所帮助-汇编我的经验w/SSDT-不自称是专家,但这可能有助于开始。