私はINSERT
のテーブルX
の後に、別のHistory
テーブルにそのレコードをすぐにコピーしたいと思います。トリガーはアイデンティティIDのプライマリキーをコピーできますか?
テーブルにはプライマリキーがIdentity
の列として格納されているため、レコードには実際に挿入されるまでプライマリキーIDはありません。
このレコードにtrigger
を入力すると、そのレコードのIDを取得できますか、それでも空白になりますか?
私はINSERT
のテーブルX
の後に、別のHistory
テーブルにそのレコードをすぐにコピーしたいと思います。トリガーはアイデンティティIDのプライマリキーをコピーできますか?
テーブルにはプライマリキーがIdentity
の列として格納されているため、レコードには実際に挿入されるまでプライマリキーIDはありません。
このレコードにtrigger
を入力すると、そのレコードのIDを取得できますか、それでも空白になりますか?
ちょうどあなたが挿入「AFTER」、ではないか「の代わりに」「FOR」として、トリガを宣言してください(最後の1 ...使用することはありませんあなたを推測;)を
「挿入後」トリガーを実行すると、そのレコードは既にID列の値と共にそこにあります。
はいIDはトリガーで使用できますが、IDが正しく取得されていることを確認してください。
@@ identity、SCOPE_IDENTITYなどは、あなたがトリガーでしたいことではありません!
SELECT @id = id FROM inserted
また、悪い考えです。
複数の変更が同時に行われることを期待するには、必ずトリガーを書き込んでください。上記の方法では、一度に複数のレコードをテーブルに挿入すると、微妙ではあるが重要なエラーが発生します。
正しいアプローチは、挿入されたテーブル
すなわち
INSERT INTO myAuditTable(Id, Datetime, user)
SELECT id, GETDATE(), USER_NAME())
FROM inserted
から自分の監査テーブルに挿入することです