编辑:我后来发现,如果使用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语句中时,它只会给我这个错误。
答案 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