我正在尝试在表上创建一个触发器,我在 SQL 工作室中遇到了上述语法错误问题,并在运行 SQL 语句时收到以下错误:
Msg 102,级别 15,状态 1,过程更新Po,第 9 行 [批处理开始行 18]
"INSERT"附近的语法不正确
这是我尝试创建的触发器:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER dbo.tiTrigger
ON dbo.TABLE_ONE
AFTER [INSERT]
AS
SET NOCOUNT ON;
DECLARE @po_state VARCHAR(20)
DECLARE @po_number VARCHAR(255)
SELECT @po_state = order_state FROM inserted
SELECT @po_number = po_number FROM inserted
UPDATE TABLE_TWO
SET PO_Status = @po_state
WHERE PO_Number = @po_number
GO
失败的原因是您需要删除 INSERT 周围的方括号,它不是对象名称。
但是,您的触发器已损坏。它有一个主要的逻辑缺陷,即只会插入一行。SQL 服务器中的触发器每个操作触发一次。您需要将其重写为基于集合的方法。这个简单的更新可以而且应该在没有任何变量的情况下完成,只是一个简单的连接。
基于此集合将是这样的。
CREATE TRIGGER dbo.tiTrigger
ON dbo.TABLE_ONE
AFTER INSERT
AS
SET NOCOUNT ON;
UPDATE t
set PO_Status = i.order_state
from TABLE_TWO t
join inserted i on i.po_number = t.PO_Number
GO