- ベストアンサー
既存テーブルから別テーブルへのデータコピー時、発番を行いたい
- 既存のテーブルから別のテーブルへデータをコピーする際に、データの発番を行いたい場合について教えてください。
- データを一括で移行する際に、主キーの重複エラーが発生してしまいます。この問題を解決する方法について教えてください。
- insert文を使用して、売上テーブルのデータに新しい売上NOを作成して追加しようとしましたが、うまくいきません。問題を解決するための方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
現在SQL Serverで試験できないので、AccessでテストしたSQL文です。テーブルは単純化し ・売上テーブル 売上NO:Pkey 品名 販売単価 ・ワークテーブル id:Pkey 品名 販売単価 です。 まず一次試験として SELECT (SELECT COUNT(*)+1 FROM ワークテーブル WHERE (ワークテーブル.品名<S.品名) OR ((ワークテーブル.品名=S.品名) AND (ワークテーブル.id>S.id))) AS [No], S.品名, S.販売単価 FROM ワークテーブル AS S ORDER BY S.品名; このSQL文はいかがでしょうか?品名順に連番が振られるようであれば INSERT INTO 売上テーブル ( 売上NO, 品名, 販売単価 ) SELECT (SELECT COUNT(*)+1 FROM ワークテーブル WHERE (ワークテーブル.品名<S.品名) OR ((ワークテーブル.品名=S.品名) AND (ワークテーブル.id>S.id))) AS [No], S.品名, S.販売単価 FROM ワークテーブル AS S; これで売り上げテーブルに「主キー重複エラー」なしにINSERT出来ます。 勿論、最終的にお望みのものにするためには right('0000000000' + (convert(nvarchar,max(売上NO) ここら辺の処理が必要なわけですが。 蛇足かもしれませんが、ワークテーブルに id を置いたのはともかく重複しない Pkey が必要だからで、それがないと連番が崩れます。
その他の回答 (2)
#1です。カテゴリーがSQL Serverでしたね。失礼しました。
補足
入れ違いで補足書き込みしてました。私のほうも失礼しました…。
データベースなど環境が全く記載されていませんが? 売上テーブルの、主キーとなる「売上NO」をオートナンバー型にしては拙いのでしょうか。 もし支障があるならばサブクエリーを使用する方法がありそうです。
補足
SqlServerです。SqlServer2000。 手動によるデータコピーであり、 アプリケーションとして動作を実現させようとしているわけではありません。 今のところ、クエリアナライザから実行しようとしています。 売上テーブル[売上NO]をオートナンバー型にすることは出来ません。
お礼
テストで動かしてみました。 いずれにしてもワークテーブルにidは必要になりそうですね。 応用してなんとか出来そうです。やってみます。 ありがとうございました。