我试图编写一个执行更新后运行的触发器。我希望触发器更新最后一个更新的行,并使用字符串“changed”填充名为ACTION_TYPE的字段。更新后更新字段的SQL触发器
表结构
USE BillingUI;
CREATE TABLE tbl8_update_transactions
(
TID INT IDENTITY PRIMARY KEY,
TABLE_NUMBER nchar(2) NOT NULL,
HOLIDAY_DATE nchar(8) NOT NULL,
FIELD_DESCRIPTION nVARchar(43) NULL,
ACTION_TYPE nchar(6) NULL,
HID int,
FOREIGN KEY (HID) REFERENCES HOLIDAY_DATE_TABLE (HID) ON DELETE CASCADE
);
触发
CREATE TRIGGER tbl8_ins
ON tbl8_update_transactions
AFTER UPDATE
AS
BEGIN
UPDATE tbl8_update_transactions
SET ACTION_TYPE = "change"
WHERE TID = inserted.TID;
END
我收到以下错误:
无效列名 “变化”。 - 我不知道为什么它认为变化是列名
多部分标识符“inserted.TID”无法绑定。 - 我不确定这一个的语法,试图在刚刚更新的行上执行更新。
你的触发器有** MAJOR **缺陷,你似乎认为它会被称为每行** ** - 这是**不是**的情况。触发器将在每个语句**中触发一次**,所以如果你的UPDATE语句影响了25行,你将触发**触发**一次,但是,然后“插入”和“删除”将分别包含25行。您的代码在这25行中选择哪一行:'...... WHERE TID = inserted.TID' - 它是非确定性的。你需要重写你的触发器来考虑这个问题! – 2014-10-03 18:49:29