2011-08-03 5 views
3

私はINSERTのテーブルXの後に、別のHistoryテーブルにそのレコードをすぐにコピーしたいと思います。トリガーはアイデンティティIDのプライマリキーをコピーできますか?

テーブルにはプライマリキーがIdentityの列として格納されているため、レコードには実際に挿入されるまでプライマリキーIDはありません。

このレコードにtriggerを入力すると、そのレコードのIDを取得できますか、それでも空白になりますか?

答えて

2

ちょうどあなたが挿入「AFTER」、ではないか「の代わりに」「FOR」として、トリガを宣言してください(最後の1 ...使用することはありませんあなたを推測;)を

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

3

「挿入後」トリガーを実行すると、そのレコードは既にID列の値と共にそこにあります。

5

はいIDはトリガーで使用できますが、IDが正しく取得されていることを確認してください。

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

SELECT @id = id FROM inserted 

また、悪い考えです。

複数の変更が同時に行われることを期待するには、必ずトリガーを書き込んでください。上記の方法では、一度に複数のレコードをテーブルに挿入すると、微妙ではあるが重要なエラーが発生します。

正しいアプローチは、挿入されたテーブル

すなわち

INSERT INTO myAuditTable(Id, Datetime, user) 
SELECT id, GETDATE(), USER_NAME()) 
FROM inserted 
から自分の監査テーブルに挿入することです
関連する問題