Shi*_*mmy 27 triggers sql-server-2005 insert
我想创建一个Insert触发器,如果它们为null,则更新所有插入行的值,根据inserted表中的另一列,新值应从不同的表中获取.
我试过了:
UPDATE INSERTED
SET TheColumnToBeUpdated =
(
SELECT TheValueCol FROM AnotherTable.ValueCol
WHERE AnotherTable.ValudCol1 = INSERTED.ValueCol1
)
WHERE ValueCol IS NULL
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Msg 286, Level 16, State 1, Procedure ThisTable_INSERT, Line 15
The logical tables INSERTED and DELETED cannot be updated.
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
Mic*_*ren 45
您需要更新目标表,而不是逻辑表.但是,您可以使用逻辑表连接以确定要更新的行:
UPDATE YourTable
SET TheColumnToBeUpdated =
(
SELECT TheValueCol FROM AnotherTable.ValueCol
WHERE AnotherTable.ValudCol1 = INSERTED.ValueCol1
)
FROM YourTable Y
JOIN Inserted I ON Y.Key = I.Key
WHERE I.ValueCol IS NULL
Run Code Online (Sandbox Code Playgroud)
小智 20
您可以将触发器更改为INSTEAD OF INSERT.这将允许您检查传入值,如果需要,可以使用其他表中的值替换它们.
CREATE TRIGGER CoolTrigger
ON MyAwesomeTable
INSTEAD OF INSERT
AS
BEGIN
INSERT MyAwesomeTable (TheValueCol)
SELECT ISNULL(INSERTED.TheValueCol, AnotherTable.TheValueCol) AS TheValueCol
FROM INSERTED
JOIN AnotherTable ON INSERTED.ValueCol1 = AnotherTable.ValueCol1
END
Run Code Online (Sandbox Code Playgroud)
注意:INSTEAD OF触发器不会导致递归.
| 归档时间: |
|
| 查看次数: |
75820 次 |
| 最近记录: |