3

INSERTテーブル内XでそのレコードをHistoryすぐに別のテーブルにコピーした後、やりたいと思います。

現在、テーブルには主キーがIdentity列として含まれているため、レコードは実際に挿入されるまで主キー ID を持ちません。

私の質問は、triggerこのレコードに対して a を実行すると、そのレコードの ID ID を取得できますか、それとも空白のままになりますか?

4

3 に答える 3

5

はい、トリガーで ID を使用できますが、その ID を正しく取得してください。

@@identity、SCOPE_IDENTITY などは、トリガーでやりたいことではありません。

SELECT @id = id FROM inserted 

も悪い考えです。

複数の変更が同時に行われることを想定して、常にトリガーを作成してください。上記のアプローチはすべて、一度に複数のレコードをテーブルに挿入すると、微妙ではあるが重大なエラーを引き起こします。

正しいアプローチは、挿入されたテーブルから監査テーブルに挿入することです

すなわち

INSERT INTO myAuditTable(Id, Datetime, user)
SELECT id, GETDATE(), USER_NAME())
FROM inserted 
于 2011-08-03T19:10:34.457 に答える
3

「挿入後」トリガーを実行すると、ID 列の値を持つレコードが既に存在します。

于 2011-08-03T19:00:16.510 に答える
2

トリガーを「FOR」または「INSTEAD OF」ではなく「AFTER」挿入として宣言するようにしてください(最後のものは使用しないと思います... ;)

http://msdn.microsoft.com/en-us/library/ms189799.aspx

于 2011-08-03T18:59:26.423 に答える