INSERT
テーブル内X
でそのレコードをHistory
すぐに別のテーブルにコピーした後、やりたいと思います。
現在、テーブルには主キーがIdentity
列として含まれているため、レコードは実際に挿入されるまで主キー ID を持ちません。
私の質問は、trigger
このレコードに対して a を実行すると、そのレコードの ID ID を取得できますか、それとも空白のままになりますか?
INSERT
テーブル内X
でそのレコードをHistory
すぐに別のテーブルにコピーした後、やりたいと思います。
現在、テーブルには主キーがIdentity
列として含まれているため、レコードは実際に挿入されるまで主キー ID を持ちません。
私の質問は、trigger
このレコードに対して a を実行すると、そのレコードの ID ID を取得できますか、それとも空白のままになりますか?
はい、トリガーで ID を使用できますが、その ID を正しく取得してください。
@@identity、SCOPE_IDENTITY などは、トリガーでやりたいことではありません。
SELECT @id = id FROM inserted
も悪い考えです。
複数の変更が同時に行われることを想定して、常にトリガーを作成してください。上記のアプローチはすべて、一度に複数のレコードをテーブルに挿入すると、微妙ではあるが重大なエラーを引き起こします。
正しいアプローチは、挿入されたテーブルから監査テーブルに挿入することです
すなわち
INSERT INTO myAuditTable(Id, Datetime, user)
SELECT id, GETDATE(), USER_NAME())
FROM inserted
「挿入後」トリガーを実行すると、ID 列の値を持つレコードが既に存在します。
トリガーを「FOR」または「INSTEAD OF」ではなく「AFTER」挿入として宣言するようにしてください(最後のものは使用しないと思います... ;)