【发布时间】:2016-06-27 14:42:04
【问题描述】:
编辑:我后来发现,如果使用 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 触发器。只有当创建触发器在 if 语句中时,它才会给我这个错误。
【问题讨论】:
-
这是一个 clr 触发器,请发布整个代码
-
谷歌搜索错误文本显示了导致此错误的至少 2 个不同原因。我们需要查看更多代码。
-
问题出在开始结束之间的 4 个点之一。有关更多详细信息,您需要放大这些点,以便我们阅读其中的内容....
-
@GuidoG 绝对正确!
-
它不能包含在
IF-CREATE TRIGGER中:“CREATE TRIGGER 必须是批处理中的第一个语句...”
标签: sql-server triggers database-project