ファイルテーブル「game.Attachments」のstream_id列にリンクするstream_id列を持つテーブル「game.FileAttachments」があります。リンク テーブルの stream_id を更新するために、File テーブルに Update トリガーを作成しました。その理由は、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 は、元のドキュメントのクローンを作成して一時的な名前を付け、ユーザーが保存することを選択すると、元のドキュメントは単純に削除され、クローンは元のドキュメントと同じ名前に変更されます。そのバイト!