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)
失败的原因是您需要删除 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)
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |