- PR -

主キーが重複していてもエラーでとめたくない or 上書きしたい

1
投稿者投稿内容
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-12-22 13:42
お世話になります。
検索ワードがわからなかったので、質問させてください。

Microsoft SQL ServerでASPを作っているのですが、
そこでデータをSQL構文でINSERTやUPDATEするときに、
主キーが重複していると通常はエラーとなって
処理ができずに終了してしまうと思います。

そこで、主キーが重複していてもエラーでとめない方法や、
データを上書きしてしまう方法など、
何か良いSQL構文はありませんでしょうか?

言ってることがよくわからないかもしれませんが、
うまく表現できないので、ひとまず質問を投げさせていただきます。

_________________
◇◇◇ 社内SEを兼務する文系プログラマです。
◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。
◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-12-22 14:05
引用:

Wingardさんの書き込み (2006-12-22 13:42) より:

そこでデータをSQL構文でINSERTやUPDATEするときに、
主キーが重複していると通常はエラーとなって
処理ができずに終了してしまうと思います。


INSERTの時はともかく、UPDATEでもなっちゃうんですか?
もし、UPDATEの結果が制約に引っかかるようなら、正常な結果ですよね。
引用:

そこで、主キーが重複していてもエラーでとめない方法や、
データを上書きしてしまう方法など、
何か良いSQL構文はありませんでしょうか?


止めない方法なんて、別に難しくないでしょう。
事前にチェックするか、またはエラーをキャッチして、
代替ロジックに移行すればいいです。

上書きについては、上でも書きましたが、
どんなエラーが出るのか、もっと具体的に教えて頂けますようお願いします。

[ メッセージ編集済み 編集者: Edosson 編集日時 2006-12-22 14:06 ]
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-12-22 14:07
こんにちは。

INSTEAD OF トリガ の利用を検討されてはいかがでしょうか。
INSTEAD OF トリガ は制約が処理される前に発動するので、お望みの処理を実現できると思います。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-12-22 14:30
ご回答ありがとうございます。

INSTEAD OF トリガでできそうな気がします。
参考書に載ってないので、今調べているところですが、
ひとまずお礼申し上げます。

>UPDATEでもなっちゃうんですか?

すみません、書き方が悪かったです。
通常はINSERTなどでデータを挿入するのですが、
それだと中にデータが入っている場合に重複するとエラーがでます。
で、UPDATEを使えば重複は防げるんですが、
ときどき中にデータが入っていないときもあり、
そのときに今度はUPDATEがエラーを吐いているようです。

なので、重複データをINSERTしてもエラーを出さない方法か、
中身が空でUPDATEしてもエラーを出さない方法が知りたいと思いました。

以上、おかしな点などありましたらご指摘いただけますでしょうか。
よろしくお願いいたします。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-12-22 14:56
ああ、ご回答いただいていて申し訳ないですが、
どうも SELECT DISTINCT でできそうです。
すみません、結果的に重複してないデータが取りたかっただけなので、
これで十分みたいです。

お手数をおかけしました。本当に申し訳ありません。
今後ともよろしくお願いいたします。


1

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