• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:既存テーブルから別テーブルへのデータコピー時、発番を行いたい)

既存テーブルから別テーブルへのデータコピー時、発番を行いたい

このQ&Aのポイント
  • 既存のテーブルから別のテーブルへデータをコピーする際に、データの発番を行いたい場合について教えてください。
  • データを一括で移行する際に、主キーの重複エラーが発生してしまいます。この問題を解決する方法について教えてください。
  • insert文を使用して、売上テーブルのデータに新しい売上NOを作成して追加しようとしましたが、うまくいきません。問題を解決するための方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#182251
noname#182251
回答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 が必要だからで、それがないと連番が崩れます。

sabo-ten
質問者

お礼

テストで動かしてみました。 いずれにしてもワークテーブルにidは必要になりそうですね。 応用してなんとか出来そうです。やってみます。 ありがとうございました。

その他の回答 (2)

noname#182251
noname#182251
回答No.2

#1です。カテゴリーがSQL Serverでしたね。失礼しました。

sabo-ten
質問者

補足

入れ違いで補足書き込みしてました。私のほうも失礼しました…。

noname#182251
noname#182251
回答No.1

データベースなど環境が全く記載されていませんが? 売上テーブルの、主キーとなる「売上NO」をオートナンバー型にしては拙いのでしょうか。 もし支障があるならばサブクエリーを使用する方法がありそうです。

sabo-ten
質問者

補足

SqlServerです。SqlServer2000。 手動によるデータコピーであり、 アプリケーションとして動作を実現させようとしているわけではありません。 今のところ、クエリアナライザから実行しようとしています。 売上テーブル[売上NO]をオートナンバー型にすることは出来ません。

関連するQ&A