如何在SQL Server中正确创建INSERT触发器?语法错误排查
错误原因及修正方案
语法错误根源
- 触发102报错的直接原因:
INSERT对应的SELECT子句外层多了不必要的括号。T-SQL语法中SELECT后跟多字段列表时,不需要用括号将所有字段整体包裹,你当前的写法会被数据库解析为单个表达式,遇到第一个逗号就会抛出语法错误。 - 隐藏的语法问题:日志表
Logs_Table的字段名User、Table、Date、Action都是SQL Server的保留关键字,直接作为字段名使用会触发语法异常,必须用方括号[]转义。 - 额外的语法疏漏:你当前编写的触发器代码只有
BEGIN没有对应的闭合END,执行时也会报错。
修正后的完整触发器代码
CREATE TRIGGER tg_test ON Hub FOR INSERT AS BEGIN SET NOCOUNT ON; INSERT INTO Logs_Table ([Date], [User], [Table], [Action], Description) SELECT CURRENT_TIMESTAMP, SYSTEM_USER, 'Hub', 'INSERT', CONCAT('Mat: ', i.Mat, '; Hub: ', i.Hub) FROM INSERTED AS i; END
优化建议
你之前声明的@sys_usr变量没有在代码中使用,可以直接删除,避免冗余代码。
内容的提问来源于stack exchange,提问作者danimille
相关产品推荐
相关产品推荐

