web-dev-qa-db-ja.com

SQL Serverでデータベース間でテーブルをコピーする

Fooというデータベースとbarというデータベースがあります。私はfooにtblFoobarという名前のテーブルを持っていて、それをデータベースfooからデータベースバーに移動させたいのです。これを行うためのSQLステートメントは何ですか?

313
RyanKeeter

SQL Serverの場合と同じデータベースサーバー上? 3部構成の命名を使用してください。

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

これはデータを移動するだけです。テーブル定義(およびパーミッションやインデックスなどの他の属性)を移動したい場合は、他に何かする必要があります。

200
Amy B

SQL Server Management Studioの[データのインポート]タスク(DB名を右クリックしてからタスク)を使用すると、この作業のほとんどが自動的に行われます。データをコピーしたいデータベースから実行します。

テーブルが存在しない場合は作成されますが、おそらくインデックスなどを再作成する必要があります。テーブルが存在する場合、デフォルトで新しいデータが追加されますが、それを調整して(マッピングの編集)、既存のデータをすべて削除することができます。

私はこれをいつも使っています、そしてそれはかなりうまくいきます。

529
David

これはうまくいくはずです。

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

それはnotコピーconstaints、デフォルトまたはインデックス。作成されたテーブルはnotクラスタ化インデックスを持ちません)。

代わりにあなたができる:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

宛先表が存在し、それが空の場合。

102
leoinfo

それが1つのテーブルだけであれば、あなたがする必要があるのはそれだけです。

  • スクリプトテーブル定義
  • 別のデータベースに新しいテーブルを作成する
  • ルール、インデックス、権限などを更新する
  • データのインポート(例へのいくつかの挿入はすでに上に示されています)

考慮しなければならないことの1つは、将来他のオブジェクトを移行するなどの他の更新です。ソーステーブルとターゲットテーブルは同じ名前ではありません。つまり、ビュー、ストアドプロシージャなどのオブジェクトに依存している場合も、変更を加える必要があります。

あなたがどんな問題もなしに手動で行くことができる1つまたは複数のオブジェクトを聖霊降臨祭。しかし、ほんの数回の更新よりも多い場合は、サードパーティの比較ツールが非常に便利です。現時点では、スキーマの移行に ApexSQL Diff を使用していますが、他のツールに問題があるとは限りません。

46
Igor Voplov
  1. Management Studioでcreate tableをスクリプト化し、そのスクリプトをバーで実行してテーブルを作成します。 (オブジェクトエクスプローラでテーブルを右クリック、スクリプトテーブルとして、作成...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

23
ScottStonehouse

また、SQL SERVERスクリプトの生成WIZARDを使用して、次のことを実行できるSQLスクリプトの作成をガイドすることもできます。

  • テーブルスキーマをコピーする
  • 任意の制約(識別、デフォルト値など)
  • テーブル内のデータ
  • そして必要なら他の多くの選択

ここ のスクリーンショットが表示されたSQL Server 2008のワークフロー例。

16
ryan

この方法で行くことができます:(一般的な例)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

また、insert節に入れるために列名も生成する必要がある場合は、次のようにします。

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName')

結果をコピーしてクエリウィンドウに貼り付け、テーブルの列名を表します。これを指定しても、ID列も除外されます。

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0

データベースが同じ場所にある場合は、行をコピーするスクリプトが機能することを忘れないでください。


あなたはこれを試すことができます。

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

両方のDBが同じサーバーにある場合、サーバー名はオプションです。

9
NeverHopeless

既存のテーブルがあり、データだけをコピーしたい場合は、このクエリを試すことができます。

destination_Existing_Tblに挿入します。col1、col2を選択します。

1
Mohan

データコピー

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
0
Arun Prasad E S