我有一个表'game.FileAttachments',它有一个stream_id列,链接到File表的stream_id列,'game.Attachments'。我在File表上创建了一个Update触发器,用于更新链接表上的stream_id;原因是,当修改File表中的文件时,stream_id会发生变化。这是我的触发器;请帮助!
CREATE TRIGGER game.tr_Update_Attachments
ON game.Attachments
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF ( UPDATE(stream_id) )
BEGIN
UPDATE game.FileAttachments
SET stream_id = i.stream_id
FROM inserted i
WHERE game.FileAttachments.stream_id IN
(
SELECT d.stream_id
FROM deleted d INNER JOIN
game.FileAttachments f ON f.stream_id = d.stream_id
)
END
END
也尝试了这个:
IF ( UPDATE(stream_id) )
BEGIN
UPDATE game.FileAttachments
SET stream_id = i.stream_id
FROM inserted i INNER JOIN
deleted d ON 1 = 1 INNER JOIN
game.FileAttachments f ON f.stream_id = d.stream_id
END
但这也行不通。
好的,我创建了一个删除触发器来测试理论;与我正在修改的文件关联的FileTable记录未更新,而是被删除,并创建了一个全新的记录。好吧,事实证明,对于Word Word医生来说,这是事实。但是,创建了一个纯文本文件,我可以根据需要多次更新,并且stream_id永远不会更改。所以,Microsoft Word,应用程序似乎克隆了原始文档,给它一个临时名称,然后,当用户选择保存它时,原始文件被简单地删除,并且克隆重命名与原始文件相同。那个BYTES!
答案 0 :(得分:0)
我认为您的触发器定义需要具备此功能:
CREATE TRIGGER game.tr_Update_Attachments
ON game.Attachments
AFTER UPDATE, DELETE
正如您所说:
SELECT d.stream_id
FROM deleted d INNER JOIN
game.FileAttachments f ON f.stream_id = d.stream_id
你的where子句中的...或者你错误地引用了这个表并需要将“已删除”的附件捕获到临时表中?