- PR -

重複キーエラーのキーは取得できますか?

1
投稿者投稿内容
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2008-03-05 12:07
SQL Server 2000で開発しております。

ストアドの中でINSERT文を実行する時に、重複キーエラーが起きたときに、どのレコードでエラーになったのかを値として返すことは可能なのでしょうか?

エラーレコードを取得しようと思ったら、FETCH等で1件ずつ更新していく方法しかないのでしょうか??
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2008-03-05 13:02
VALUES句を使用する場合は1レコードずつしかINSERTできないから、どのレコードとダブったのかはすぐ分かると思うので、今回の件はSELECT句を使っていると判断してよろしいでしょうか?

FETCH等で1件ずつ更新していくのでもいいかもしれませんが、私だったら、INSERT元のレコードと主キーがダブるレコードがINSERT先に存在しないかどうかチェックします。INSERT元とINSERT先を主キーで内部結合した結果がダブっちゃうレコードですよね。

[ メッセージ編集済み 編集者: かめたろ 編集日時 2008-03-05 13:03 ]
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2008-03-05 17:38
返答ありがとうございます。

ご指摘の通り、INSERT 〜 SELECT 〜を使っています。

>INSERT元のレコードと主キーがダブるレコードがINSERT先に存在しないかどうかチェックします。
SQL側で重複キーエラーを出しているということは、どこのキーでエラーが起こったかはおそらく内部的には持っているだろうから、それを取ってくる方法はないかなあ、と考えていたのですが、更新処理の前にチェック用のクエリをかますのが普通の方法ですかね??
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-03-05 21:19
引用:

>INSERT元のレコードと主キーがダブるレコードがINSERT先に存在しないかどうかチェックします。
SQL側で重複キーエラーを出しているということは、どこのキーでエラーが起こったかはおそらく内部的には持っているだろうから、それを取ってくる方法はないかなあ、と考えていたのですが、更新処理の前にチェック用のクエリをかますのが普通の方法ですかね??



それが最も普通のやり方です。それ以外の方法もあるかもしれませんがSQlでは
不可能でしょう



JIMMY
常連さん
会議室デビュー日: 2004/10/26
投稿数: 32
お住まい・勤務地: 東京
投稿日時: 2008-04-11 12:22
「INSERT 〜 SELECT 〜 」の前に、INSERT先のテーブルと、SELECT先のテーブルをキー項目でJOINして、JOINできたレコードがエラーだと思うのですが。

・・・ということは考えているのかな?
1

スキルアップ/キャリアアップ(JOB@IT)