foo というデータベースと bar というデータベースがあります。データベース foo からデータベース bar に (データとすべてを) 移動したい tblFoobar という名前のテーブルが foo にあります。これを行うための SQL ステートメントは何ですか?
8 に答える
SQL Server Management Studio の「データのインポート」タスク (DB 名を右クリックしてからタスク) が、このほとんどを実行します。データのコピー先のデータベースから実行します。
テーブルが存在しない場合は作成されますが、おそらくインデックスなどを再作成する必要があります。テーブルが存在する場合、デフォルトで新しいデータが追加されますが、それを調整 (マッピングの編集) して既存のデータをすべて削除することができます。
I use this all the time and it works fairly well.
SQL サーバーでは? 同じデータベースサーバー上ですか?3 部構成の命名を使用します。
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
これはデータを移動するだけです。テーブル定義 (およびパーミッションやインデックスなどのその他の属性) を移動する場合は、別の操作を行う必要があります。
これは機能するはずです:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
制約、デフォルト、またはインデックスはコピーされません。作成されたテーブルには、クラスター化されたインデックスはありません。
または、次のこともできます。
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
宛先テーブルが存在し、空の場合。
それが1つのテーブルのみの場合、あなたがする必要があるのは
- スクリプトテーブル定義
- 別のデータベースに新しいテーブルを作成する
- ルール、インデックス、権限などを更新する
- データのインポート (例へのいくつかの挿入は既に上に示されています)
考慮しなければならないことの 1 つは、将来の他のオブジェクトの移行など、他の更新です。ソース テーブルと宛先テーブルの名前が同じではないことに注意してください。これは、ビュー、ストアド プロシージャなどのオブジェクトに依存している場合にも変更を加える必要があることを意味します。
1 つまたは複数のオブジェクトを指定すると、問題なく手動で移動できます。ただし、更新が少ない場合は、サードパーティの比較ツールが非常に便利です。現在、スキーマの移行にApexSQL Diffを使用していますが、他のツールを使用しても問題ありません。
create table
Management Studioでスクリプトを作成し、そのスクリプトをバーで実行してテーブルを作成します。(オブジェクトエクスプローラーでテーブルを右クリックし、テーブルをスクリプトとして、作成先...)INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SQL Server スクリプトの生成ウィザードを使用して、次のことを実行できる SQL スクリプトの作成をガイドすることもできます。
- テーブル スキーマをコピーする
- 制約 (ID、デフォルト値など)
- テーブル内のデータ
- 必要に応じて他の多くのオプション
SQL Server 2008のワークフローの良い例とスクリーン ショットをここに示します。
この方法で行くことができます:(一般的な例)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
また、挿入句に入れるために列名も生成する必要がある場合は、次を使用します。
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 が同じサーバーにある場合、サーバー名はオプションです。