ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:テーブルの中身を違うテーブルへコピー) テーブルの中身を別のテーブルへコピーする方法 2004/06/04 01:33 このQ&Aのポイント Aテーブルの内容を別のテーブルにコピーする方法を教えてください。ALTER TABLEを使わずに、Aテーブルの内容を新しいテーブルにコピーする方法について教えてください。SQL Serverを使用して、Aテーブルの内容を別のテーブルにコピーする方法について教えてください。 テーブルの中身を違うテーブルへコピー お世話になります。 SQLについて質問があるのですが・・・。 Aというテーブルがあり、何件かデータが入っています。 そのAテーブルにフィールドを2つ新たに追加したいのです。 ALTER TABLEは使わずに、 以下の様な操作をしたいと考えております。 1:Aテーブルを違う名前に変更。 もしくはテーブルを丸々コピー。 2:テーブルBを作成。 (テーブルAのフィールドに2つフィールド追加した内容) 3:テーブルBにテーブルAの内容を丸々コピー。 その際、新規に追加した2つのフィールドには、初期値として、何かの文字or数字を入れる。 4:Aテーブルを削除 と、いう感じです。 作成はINSERT、削除はDROPを使えばいいのかなーって 思っているのですが、 テーブル名の変更や、テーブルの内容のコピーが ちょっと分かりません。 上記について、ご教授の程、よろしくお願いします。 なお、DBにはSQL Serverを使用しています。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー taka_tetsu ベストアンサー率65% (1020/1553) 2004/06/04 09:59 回答No.1 >テーブル名の変更や、テーブルの内容のコピーが ちょっと分かりません。 テーブル名の変更 sp_rename http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_sp_ra-rz_3ns5.asp テーブルの内容のコピー insert into レコード追加先テーブル名 select フィールド名1, フィールド名2, ・ ・ ・ 'A', 0 from 元テーブル名 #フィールドの順番はレコード追加先テーブルの順番にあわせること。対応しないフィールド(今回は追加したフィールド)に対しては、'A'や0のように、直接値を指定する。 >作成はINSERT、削除はDROPを使えばいいのかなーって 表の作成はCREATE TABLEです。 質問者 お礼 2004/06/06 21:06 回答ありがとうございます。 おかげさまで、やりたい動作ができました。 >表の作成はCREATE TABLEです。 あ、そうでしたね・・・。 何をぼけていたんだろう?って感じです。 どうもありがとうございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターデータベースSQL Server 関連するQ&A SQL Server(MSDE2000) : ALTER TABLE SQL Server(MSDE2000) : ALTER TABLE した項目に対し、直後に UPDATE で値をセットできない 既存のテーブルを仕様変更するため、列を追加し、初期値で埋める SQL 文を書こうとしていますが、うまく動かず、エラーとなってしまい、原因が判らず困っています。 サンプル SQL 文: ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ ※テスト毎に、必ず DROP TABLE TEST_TABLE されている事が前提です。 上記 SQL 文のうち、1行目~3行目までを抜粋して実行すると、ちゃんと CREATE TABLE され、INSERT され、ALTER TABLE される事を確認しました。 ところが、4行目までを一気に実行しようとすると、 ------ SQL実行中に以下のエラーが発生しました。 エラーコード:207 [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'TEST_FIELD3' は無効です。 SQLステータス:S0022 ------ となってしまい、UPDATE で初期値を埋める事ができません。 しかも、UPDATE に失敗するどころか、2行目の INSERT から以降が結果に反映されなくなるという状況に陥ってしまいます。 また、既存のテーブルの仕様変更が目的なので、その状況に近づけるために、まず、 ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ------ を実行し、既存のテーブル(とレコード内容)が存在する状態を作り出された事を、ツール等で確認してから、 ------ ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ の2行を実行してみると、やはり UPDATE は失敗し、前述と同じエラーが発生します。 またこの場合、ALTER TABLE の実行結果も反映されていません。(つまり、TEST_FIELD3 が列追加されていない) もちろん、ALTER TABLE だけを実行した場合には、ちゃんと列は追加されます。 その後に、UPDATE を実行すれば、ちゃんと追加列に初期値がセットされます。 どうやら、「一回の SQL 文の実行の中で、ALTER TABLE によって新設した列に対しては、UPDATE などでのアクセスはすぐにはできない」のではないか?という状況のようなのです。一回の SQL 文の実行の中において、何らかのトランザクション動作っぽい挙動を感じます。 つまり、ALTER TABLE で追加された列は、その時点ではまだ完全にシステムに認知されていないため、直後の UPDATE 文で認識できずに失敗するのではないか?と。そして、そこでのエラー発生が、ロールバック的に実行した処理をキャンセルしてしまうため、結果として、ALTER TABLE が実行されなかった事になったり、INSERT が実行されなかった事になったりしているのではないか?と思う次第です。 考えられる回避策としては、SQL 文を別々に作成し、個別に実行すれば良いだけの事なのですが、できれば、SQL 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。 テーブルのマッチングについて ORACLE10gを使用しています。 AとB同じレイアウト(キーも同じ)のテーブルがあります。 この2つのテーブルを比較して、 (1)Aテーブルのみにあるもの:1レコードCテーブルに追加 (2)Bテーブルのみにあるもの:1レコードCテーブルに追加 (3)A、B両方にあるもの:2レコードCテーブルに追加 上記に該当するレコードをCテーブルにINSERTしたいです。 実は、Cテーブルに項目が1つ追加されまして「区分」を書く必要があります。 どのパターン((1)か(2)か(3))でINSERTしたデータかです。 (1):1、(2):2、(3):3をセットする どのようにSQLを作成すると実現できるのでしょうか? ご指導よろしくおねがいします。 別のDBからテーブルをコピーする方法 SQL Server2005 Express Edition を使っています。 異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの ですが・・・ コピー元DB名:DB_A コピー元テーブル名:dbo.顧客 コピー先DB名:DB_B テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。 お教えいただければ幸いです。 よろしくお願いいたします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム Oracle テーブルの列削除 タイトルの通りテーブル(test)の列(retu)を削除したいのですが・・・ Sql*pLUS画面 SQL> alter table test drop(retu); ←この用に入力 alter table test drop(retu) * エラー行: 1: エラーが発生しました。 ORA-00905: キーワードがありません。 となってしまい列を削除できません。 なにか構文の間違いでしょうか? レプリケーションしているテーブルに対する列追加やフィールドタイプの変更 お世話になります。 レプリケーションしているテーブルに対して、列(フィールド)の追加や フィールドタイプを変更しようとすると、レプリケーション絡みのエラー が発生します。 テーブル 'xxxテーブル' - テーブルを修正できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]レプリケー ションで使用されているので、テーブル 'dbo.xxxテーブル' を 削除 できません。 その都度、当該テーブルを使用しているパブリケーションをいったん削除し、 列の追加やフィールドタイプの変更後、再度パブリケーションを作成して いる次第です。 パブリケーションを削除せず列を追加したり、フィールドタイプを変更する方法 はございますでしょうか。ご教授願います。 副問合せをいれたINSERT文で、問合せ結果が無い場合 副問合せをいれたINSERT文で、問合せ結果が無い場合 環境はSQL Server2005です。 テーブルA,テーブルBが存在し、テーブルAにレコード追加する際に一部をテーブルBから抽出して、 INSERTしようとしています。 [SQL文] INSERT INTO テーブルA(フィールド1, フィールド2, フィールド3,フィールド4・・・) SELECT 'AAA', 'BBB' ,B.フィールド3, B.フィールド4 ・・・ FROM テーブルB B WHERE ~ この場合、テーブルBにWHEREで指定した条件のレコードが存在しない場合はINSERTされなくなってしまいます。 存在しない場合は、該当のフィールドにはNULLをいれたいのですが、テーブルBからの結果が存在しない場合でも テーブルAにINSERTする方法はありますか? Access2000におけるテーブル追加について テーブル1にテーブル2の内容をすべて追加しようと思います。 二つのテーブルのフィールド項目は同じにしました。(テストなのでとりあえず番号と名前) マクロを使ってやろうと思い、アクションを「SQLの実行」とし、SQLステートメント には「INSERT INTO <テーブル1> SELECT<社員番号>,<名前>FROM<テーブル2>」 としました。 しかし、マクロを実行してみると「INSERT INTO 構文エラー」となってしまいます。 なぜなんでしょうか? ID列を含むテーブルコピー、編集 ID列を含む「テーブルA」の内容をコピー&コピーの一部項目を編集して、ID列はリセットして振り直しを行った後、「テーブルA」にINSERTするといった事をしたいのです。編集する項目、IDの項目はKEYになっている。 SQLリファレンスで調べてみましたが、SET IDENTITY_INSERT XXXX ON、DBCC CHECKIDENTなどの使い方がいまいち良くわからないのです。 1.「テーブルA」のIDENTITYをはずした形で、コピー先のテーブル「テーブルB」をCREATE。(レイアウトは全く同じ。) 2.「テーブルA」を全て、「テーブルB」(編集用)へINSERT。 3.「テーブルB」の一部項目を編集、「テーブルA」のID列に相当する項目を'1'から配番する。 4.編集後の「テーブルB」を全て、ID列を含む「テーブルA」にINSERT。 上記3、4項の方法が良くわかりません。 データテーブルは、「年度」・「履歴番号」(ID)・「その他項目多数」を持ち、編集方法は、「年度」を新年度に置換し、「履歴番号」を'1'から振り直したものを、「テーブルA」にINSERTしたいのです。 「履歴番号」(ID)の振り直しの条件はありません。レコードTOPから'1'から順に再配番されればいい。 やりたい事は単純なのですが。。。。初心者ですみません。 助言いただければと思い質問しました。 テーブル(構造)のコピー 各主要データの更新記録を別のテーブルに記録するようにしたいのですが、 元のテーブルに処理内容(登録、訂正、削除)と日時を追加するだけなので、 元のテーブルの構造がコピーできれば簡単に作れると思い、色々ためした のですが出来ません(方法が判りません)、方法を教えて下さい。 同一DB内、同一スキーマ内、別DB間でコピーが出来ればと考えています。 宜しくお願いします。 mysqlのalter table中のロックについてです。 mysqlのalter table中のロックについてです。 下記のように、alterでテーブルを再構築中に同じテーブルにinsertが実行された場合、 接続Bのinsertはブロックされるかと思うのですが、テーブルが大きくalterに時間がかかる場合、 タイムアウトなどは発生するのでしょうか。 またもし発生する場合、タイムアウト値の設定などの確認方法はあるのでしょうか。 1.接続A alter table table1 add columnB int(11) ; 2.接続B(接続Aのalter実行中) insert into table1(columnA) values('aaa'); フィールドサイズの変更方法について お世話になります。SQL初心者です。 VB5+ACCESS97でデータが入っているテーブルのある特定のテキスト型の列サイズを5から6に変更する必要が出てきました。 テーブル名を変えたくないのですが、 1.列サイズを変更した新テーブルをCREATE 2.元テーブルを全項目SELECTして新テーブルにINSERT 3.元テーブルをDROP 4.新テーブルと同じ属性で元テーブル名で新々テーブルをCREATE 5.新テーブルから全項目SELECTして新々テーブルにINSERT 6.新テーブルをDROP この方法しかないでしょうか。コピーのコピーで時間がかかりそうで悩んでます。 手元の書籍ではACCESS97では、テーブル名のリネームとか、ORACLEのALTER TABLEのような属性変更ができないような気がするのですが、もしコマンドをご存知でしたら併せて教えてくださると、とても助かります。 よろしくお願いします。 フィールド数が異なるテーブル間の転記と、フィールド追加の順番 Oracle10で似たようなテーブルAとBがあります。BからAに転記したいのですが、フィールドが正しく対応してインサートするか心配です。 AとBは現在Bの方のみrikaが多くあり、今回新たに一時テーブルBだけsyakaiテーブルを追加して、同じことをさせるのですが、 Aテーブルにkai namae kokugo sansuまで正しく入るかのかお聞きしたいです。 フィールド追加した場合の順番もどうなるか知りたいです。 テーブルA(メイン) kai namae kokugo sansu テーブルB(一時的) kai namae kokugo sansu rika (syakai) BからAへ転記するSQL文 insert into A select kai, namae, kokugo, sansu, rika, syakai where kai = 2; AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム マスタデータ更新 こんにちは。 システム開発の基礎的なところがわからないので、教えていただきたく、投稿させていただきます。 システム開発をほとんどやったことがないので、言葉が変なところもあるかと思いますが、宜しくお願いいたします。 サーバー上に、AというSQLServerのDBがあります。 今までは、システム管理者のみがAccessからA.DBのリンクテーブルを使い、マスタデータの更新/追加/削除を行っていましたが、今後、リーダークラスの人もできるようにしたい!という要望があり、そのインターフェース部分を作成しています。 いろいろと考え、フロントエンド側にAccessでB.mdbを作成し、そこには、A.DBと同じテーブル構造の一時TBLを作成し、B.mdbを開いた時にA.DBから全データを取得することにしました。(取得するところまではできています) ここから、設定するための画面作成をしますが、最終的に、更新/追加/削除されたデータは、どのようにA.DBにUPすればいいのでしょうか? 考えた方法として (1)B.mdb内に、一時テーブルとは別に、更に同じ構造の変更用テーブルを作成。 設定画面から更新/追加/削除されたデータは変更用テーブルに保存し、全ての処理が終了したら、変更用テーブルにあるデータを1つづつ見て、A.DBへ更新/追加/削除をかける (2)一時テーブルのデータを直接更新/追加/削除し、全ての処理が終了したら、全テーブルのレコードを1件づつ比較し、A.DBへ更新/追加/削除をかける というくらいしか思いつかないのです。 その他に思ったのが、一時テーブルもしくは変更用のテーブルに、レコード毎に「更新/追加/削除」がわかるようにフラグを設けて、そのフラグに従ったSQL文を発行する というくらいです。。。 根本的に、マスタデータに対する更新/追加/削除のやり方が間違っていたりしますか? 誰も聞ける人がいないので、どうぞ宜しくお願いいたします!!! アクセス2010 テーブル内コピー フィールド1,フィールド2,フィールド3,フィールド4 フィールド1はID番号です。 フィールド4が条件に一致するレコードだけを、同じテーブル内に追加コピーするSQLはどう記述したらよろしいでしょうか? 1,長嶋,100,巨人 2,王,80,巨人 3,野村,90,ヤクルト フィールド4の条件 =巨人 として追加したい 1,長嶋,100,巨人 2,王,80,巨人 3,野村,90,ヤクルト 4,長嶋,100,巨人 5,王,80,巨人 テーブルからテーブルの移行について あるテーブルから違うテーブルにデータを挿入しようとしています。 データ取得はPHPで作成していますが、 DBはPostgresです。 INSERT INTO VALUEで値を入れたいのですが、 テーブルの形式が違うため、フィールド数も違います。 VALUE(,,値,,) とするとエラーになってしまいます。 フィールド名で入れるしか方法はないのでしょうか? 何かよい案がありましたら、ご教授ください。 よろしくお願いいたします。 SQLサーバでテーブルをコピーする SQLサーバ超初心者です。 A支店用のテーブルを作成(dbo.data_A)したのですが B支店(dbo.data_B)、C支店用(dbo.data_C)のテーブルを作成したいです。 Accessなどのように、コピーペーストなどはできないのですよね? ご教授お願いいたします! テーブルコピー処理 早速質問させていただきます。 VB2005+MSDE2000でWindowsアプリを作成しています。 Aテーブル(本番テーブル)とBテーブル(ミラーテーブル)がありまして、 BテーブルはAテーブルと同列を持っており最終列に更新時刻が追加されています。そしてAとBともに年月列(200610等)を持っています。 実現したい処理は、年月度の売上データをミラーテーブルにコピーする処理です。 1.年月を元にAテーブルからデータを抽出する。 2.Bテーブルに対してトランザクションをかける。 3.年月を元にBテーブルから削除する。 4.1で取得したデータをBテーブルに追加する。 (この時、Bテーブルの最終列に更新時刻を入れる。) このような処理を行う際に、処理1は単純にセレクトなのでSqlDataAdapterでDataTableに流し込むのが最適かなと思います。 処理2についてもSqlTransactionを開始すればOK。 処理3はトランザクション内で削除を実施。 最後の処理4をどのように実装すればよいのか不明です。 SqlDataAdapterを使って処理1で取得したDataTableをBテーブルに追加したいのですが可能でしょうか? このあたりを具体的にご教授のほどお願い致します。 (SQLSERVER) 別サーバーへテーブルコピー 標題の別サーバーのDBへテーブルをコピー(更新)したいと考えておりますが、やり方が全く分かりませんのでお教えください。 【更新元】 販売管理サーバー OS:Windwos2008R2 SQL SERVER 2008R2 サーバー名:POS DB名:POSDATA テーブル名:POS売上伝票 【更新先】 社内開発用サーバー OS:Windwos2008R2 SQL SERVER 2012Express サーバー名:AD DB名:POS テーブル名:POS売上伝票 POS上のSQL ManagementStudeoから、AD上のSQLSERVERへのアクセスは可能な状態にしております。 ◎実装したい要件 POSサーバー上のデータを、毎日定時にADサーバー上のDBに追加更新 ※理想としては、バッチ等のスクリプトをタスクに登録し定時に実行 自分なりに調べてみたのですが、データを丸ごとコピーする場合は、"bcp"コマンドを実行すれば可能なようですが、bcpコマンドで、サーバー間のコピーの方法が良くわかりませんでした。 また、出来れば日々更新する為、データが変更されたレコードはUPDATE追加されたデータは、INSERTする事が理想です。 ※夜間のバッチ処理ですので、上記の方法が私の知識的に難しようであれば、テーブルを作り直ししてもよいと考えております。 効率的な方法をご存じの方がいらっしゃいましたらアドバイスをお願いいたします。 SQLでフィールドの順番を変更したい お世話になっております。 ORACLEを使用しております。 既存のテーブルに新しいフィールドをSQL文にて ALTER TABLE TEST_MST ADD TEST_CD VARCHAR2(2); と言う風に、SQL*PLUSにて追加いたしました。 これを参照しますと、 追加したフィールドがテーブルの一番最後のフィールドに 追加されているのですが、 フィールドの順番を変更したいと考えております。 SQL文にて何か方法はございませんでしょうか。 ご返答を宜しくお願い致します。 構造が同じ別テーブルInsert Into する場合 追加クエリをVBA上のSQLで作成しています。 A.MDBとB.MDBに同名のTable_Aがあり、フィールドも同じです。。 これを重複をチェックするためにField_Aでジョインさせていますが、 テーブル名もフィールド名も同じなために区別ができません。 どのようにして区別するとよいのでしょうか? 注目のQ&A 40代前半。自立していないと言われました 恋人が異性と2人で出かける場合、どこまで許す? 注意された時 恋人について わざわざ隣に座る男性 弱者男性が心を保ち続けるための生き方について パソコンの買換え だし巻きたまご 定電流源 教えて下さい カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る OKWAVE コラム マッチングアプリは顔写真が重要!容姿に自信がなくても出会いを見つけるには 美容男子ミドル世代の悩み解決?休日ファッション・爪・目元ケア プラモデル塗装のコツとは?初心者向けガイド 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
回答ありがとうございます。 おかげさまで、やりたい動作ができました。 >表の作成はCREATE TABLEです。 あ、そうでしたね・・・。 何をぼけていたんだろう?って感じです。 どうもありがとうございました。