我希望将此列HiddenID用作IDENTITY,以便当我的触发器更新列时,它将知道要更新哪个,因为当前它没有,所以每当我插入新记录时,触发器会更新它的假设对于具有用于新记录的值的所有列。但它返回错误
多部分标识符" inserted.HiddenId"无法受约束。
触发
CREATE TRIGGER InsertNoOfDays ON CurrentApplication
AFTER INSERT
AS
BEGIN
DECLARE @temp INT
SELECT @temp = (coalesce(DATEDIFF(day, StartDate, EndDate),0)+1) --Default 0
FROM inserted
UPDATE CurrentApplication SET NoOfDays = @temp WHERE CurrentApplication.HiddenID = inserted.HiddenId
END
表格
CREATE TABLE CurrentApplication
(
StartDate datetime ,
EndDate datetime ,
NoOfDays integer,
StaffID integer ,
AppStatus varchar(30) DEFAULT 'PENDING',
HiddenID integer IDENTITY
)
答案 0 :(得分:1)
完全正常。 您的更新语句未指定"插入"表。 声明"来自插入"不见了。因此,"插入"无法找到。
答案 1 :(得分:1)
我根本不会使用触发器。对于这种情况,计算列可以正常工作,并处理多行插入:
ALTER TABLE CurrentApplication DROP COLUMN NoOfDays;
ALTER TABLE
CurrentApplication
ADD NoOfDays AS (coalesce(DATEDIFF(day, StartDate, EndDate),0)+1) PERSISTED
这会删除现有的NoOfDays
列,然后将其替换为新的computed column,只要NoOfDays
或StartDate
更改,就会计算EndDate
并存储计算出的值与其他表格数据一起提供速度。
答案 2 :(得分:0)
可能您正在寻找更新连接语法;像
UPDATE c
SET NoOfDays = @temp
FROM CurrentApplication c
JOIN inserted i
ON c.HiddenID = i.HiddenId;
答案 3 :(得分:0)
RMS是对的,你的触发器应如下所示:
CREATE TRIGGER InsertNoOfDays ON CurrentApplication
AFTER INSERT
AS
BEGIN
UPDATE ca
SET NoOfDays = (coalesce(DATEDIFF(day, i.StartDate, i.EndDate),0)+1)
FROM CurrentApplication ca
INNER JOIN Inserted ON ca.HiddenID = i.HiddenId
END