- - PR -
重複キーエラーのキーは取得できますか?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-03-05 12:07
SQL Server 2000で開発しております。
ストアドの中でINSERT文を実行する時に、重複キーエラーが起きたときに、どのレコードでエラーになったのかを値として返すことは可能なのでしょうか? エラーレコードを取得しようと思ったら、FETCH等で1件ずつ更新していく方法しかないのでしょうか?? | ||||
|
投稿日時: 2008-03-05 13:02
VALUES句を使用する場合は1レコードずつしかINSERTできないから、どのレコードとダブったのかはすぐ分かると思うので、今回の件はSELECT句を使っていると判断してよろしいでしょうか?
FETCH等で1件ずつ更新していくのでもいいかもしれませんが、私だったら、INSERT元のレコードと主キーがダブるレコードがINSERT先に存在しないかどうかチェックします。INSERT元とINSERT先を主キーで内部結合した結果がダブっちゃうレコードですよね。 [ メッセージ編集済み 編集者: かめたろ 編集日時 2008-03-05 13:03 ] | ||||
|
投稿日時: 2008-03-05 17:38
返答ありがとうございます。
ご指摘の通り、INSERT 〜 SELECT 〜を使っています。 >INSERT元のレコードと主キーがダブるレコードがINSERT先に存在しないかどうかチェックします。 SQL側で重複キーエラーを出しているということは、どこのキーでエラーが起こったかはおそらく内部的には持っているだろうから、それを取ってくる方法はないかなあ、と考えていたのですが、更新処理の前にチェック用のクエリをかますのが普通の方法ですかね?? | ||||
|
投稿日時: 2008-03-05 21:19
それが最も普通のやり方です。それ以外の方法もあるかもしれませんがSQlでは 不可能でしょう | ||||
|
投稿日時: 2008-04-11 12:22
「INSERT 〜 SELECT 〜 」の前に、INSERT先のテーブルと、SELECT先のテーブルをキー項目でJOINして、JOINできたレコードがエラーだと思うのですが。
・・・ということは考えているのかな? |
1