4

ファイルテーブル「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 は、元のドキュメントのクローンを作成して一時的な名前を付け、ユーザーが保存することを選択すると、元のドキュメントは単純に削除され、クローンは元のドキュメントと同じ名前に変更されます。そのバイト!

4

1 に答える 1