由于“指定的事件类型在指定的目标对象上无效”,无法在 SQL 表上创建触发器。

Jus*_*ley 1 sql sql-server triggers

我正在尝试在表上创建触发器,但在 SQL Studio 中遇到上述问题作为语法错误,并在运行 SQL 语句时出现以下错误:

消息 102,级别 15,状态 1,过程 UpdatePo,第 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
Run Code Online (Sandbox Code Playgroud)

Sea*_*nge 5

失败的原因是您需要删除 INSERT 周围的方括号,它不是对象名称。

然而,你的扳机坏了。它有一个主要的逻辑缺陷,即只能插入一行。SQL Server 中的触发器每次操作都会触发一次。您需要将其重写为基于集合的方法。这个简单的更新可以而且应该在没有任何变量的情况下完成,只需一个简单的连接。

做这组基于会是这样的。

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
Run Code Online (Sandbox Code Playgroud)