更改触发器时关键字“AS”附近的语法不正确
Incorrect syntax near the keyword “AS” when alter trigger
我创建了名为 trgInsteadofdeleteEmp 的触发器
我只是想改变它,我写了以下 SQL 代码
alter trigger trgInsteadofdeleteEmp on Emp
instead of delete
as
begin
declare @id int , @name nvarchar(100)
select @id =id from deleted
select @name = name from deleted
insert into EmployeeAudit values (@id ,@name + 'tried to delete at' + GETDATE() as varchar(50))
end
并有以下输出:
Msg 156, Level 15, State 1, Procedure trgInsteadofdeleteEmp, Line 8 Incorrect syntax near the keyword 'as'.
谁能指出我如何找到错误的方向
谢谢。
不不不不不不
不要错误地认为 inserted
和 deleted
只有一行。您只是在您的代码中放置了会在意想不到的时间弹出的错误。我实际上希望 SQL 服务器在创建触发器时标记此用法。
改为:
alter trigger trgInsteadofdeleteEmp on Emp
instead of delete
as
begin
insert into EmployeeAudit(id, name)
select id,
name + ' tried to delete at ' + convert(varchar(255), GETDATE(), 121) )
from deleted d;
end;
您的错误是由 as
引起的。似乎缺少 cast()
功能。但这不是正确的解决方法。对于 date/times,使用 convert()
或 format()
以及所需的格式。
其他建议:
- 在执行
insert
时始终包含列名。事实上,审计 table 确实应该有一个身份 ID 列、createdBy
和 createdAt
列,它们都具有默认值。
- 查看将生成的字符串并确保它们可读。
- 使用分号结束语句。
- 不要依赖 date/time 值的默认格式。
我创建了名为 trgInsteadofdeleteEmp 的触发器 我只是想改变它,我写了以下 SQL 代码
alter trigger trgInsteadofdeleteEmp on Emp
instead of delete
as
begin
declare @id int , @name nvarchar(100)
select @id =id from deleted
select @name = name from deleted
insert into EmployeeAudit values (@id ,@name + 'tried to delete at' + GETDATE() as varchar(50))
end
并有以下输出:
Msg 156, Level 15, State 1, Procedure trgInsteadofdeleteEmp, Line 8 Incorrect syntax near the keyword 'as'.
谁能指出我如何找到错误的方向
谢谢。
不不不不不不
不要错误地认为 inserted
和 deleted
只有一行。您只是在您的代码中放置了会在意想不到的时间弹出的错误。我实际上希望 SQL 服务器在创建触发器时标记此用法。
改为:
alter trigger trgInsteadofdeleteEmp on Emp
instead of delete
as
begin
insert into EmployeeAudit(id, name)
select id,
name + ' tried to delete at ' + convert(varchar(255), GETDATE(), 121) )
from deleted d;
end;
您的错误是由 as
引起的。似乎缺少 cast()
功能。但这不是正确的解决方法。对于 date/times,使用 convert()
或 format()
以及所需的格式。
其他建议:
- 在执行
insert
时始终包含列名。事实上,审计 table 确实应该有一个身份 ID 列、createdBy
和createdAt
列,它们都具有默认值。 - 查看将生成的字符串并确保它们可读。
- 使用分号结束语句。
- 不要依赖 date/time 值的默认格式。