gpt4 book ai didi

triggers - 我的 Sql Server 2012 FileTable 更新触发器有什么问题

转载 作者:行者123 更新时间:2023-12-01 06:39:51 25 4
gpt4 key购买 nike

我有一个表“game.FileAttachments”,它有一个stream_id 列,该列链接到文件表“game.Attachments”的stream_id 列。我在文件表上创建了一个更新触发器,以更新链接表上的 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 记录没有更新,而是被删除,并创建了一个全新的记录。好吧,事实证明,对于 Ms Word 文档,这是真的。但是,创建了一个纯文本文件,我可以根据需要进行多次更新,并且 stream_id 永远不会改变。因此,Microsoft Word 应用程序似乎会克隆原始文档,为其指定一个临时名称,然后,当用户选择保存它时,原始文档将被简单地删除,并将克隆重命名为与原始文档相同的名称。那个字节!

最佳答案

我认为你的触发器定义需要有这个:

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 子句中...或者您错误地引用了该表并需要将“已删除”的附件捕获到临时表中?

关于triggers - 我的 Sql Server 2012 FileTable 更新触发器有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com