web-dev-qa-db-ja.com

あるSQL Serverから別のSQL Serverにテーブルデータをエクスポートする

2つのSQL Serverがあります(両方とも2005バージョン)。

複数のテーブルをあるテーブルから別のテーブルに移行したい。

私が試してみました:

  • ソースサーバーで、Tasks/Generate scriptsを選択してデータベースを右クリックしました。問題は、Table/View optionsの下にScript dataオプションがないことです。

  • 次に、Script Table As/Create scriptを使用してSQLファイルを生成し、送信先サーバーにテーブルを作成しました。しかし、私はまだすべてのデータが必要です。

それから私は使用してみました:

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table]

しかし、私はエラーを受け取ります:

オブジェクトに含まれるプレフィックスの最大数を超えています。最大は2です。

誰かが私の問題の正しい解決策を教えてくれますか?

59
no9

これを試して:

  1. Script Table As / Create Scriptステップのスクリプトを使用して、ターゲットサーバーにテーブルを作成します

  2. ターゲットサーバーで、T-SQLステートメントを発行できます。

    INSERT INTO dbo.YourTableNameHere
       SELECT *
       FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
    

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

58
marc_s

さらに別のオプションを表示するために(SQL Server 2008以降の場合):

  1. データベースを右クリック->「タスク」を選択->「スクリプトを生成」を選択
  2. コピーする特定のデータベースオブジェクトを選択します。 1つ以上のテーブルを考えてみましょう。次へをクリックします
  3. [詳細設定]をクリックし、[スクリプト化するデータの種類]まで下にスクロールして、[スキーマとデータ]を選択します。 OKをクリック
  4. 生成されたスクリプトを保存する場所を選択し、[次へ]をクリックして続行します
43
Konstantin

タスク/スクリプトの生成にスクリプトテーブルオプションがあります!私も最初は見逃しました!ただし、そこに挿入スクリプトを生成できます(非常に優れた機能ですが、非常に直感的ではありません)。

「スクリプトオプションの設定」のステップに到達したら、「詳細」タブに移動します。

説明されている手順 ここ (写真は理解できますが、ラトビア語で書いています)。

9
Jānis

SQL Server インポートとエクスポートウィザード を使用してみてください([タスク]-> [データのエクスポート])。

宛先データベースにテーブルを作成することを提案します。一方、これまで見てきたように、スクリプトウィザードはテーブル構造のみを作成できます。

スクリプトを使用してテーブルが既に作成されている場合、データをコピーする別の方法があります。BCPコマンドを使用して、ソースサーバーからターゲットサーバーにすべてのデータをコピーします。

テーブルデータをソースサーバー上のテキストファイルにエクスポートするには:

bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 

ターゲットサーバー上のテキストファイルからテーブルデータをインポートするには:

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>
6
praveen

キックのためだけに。

リンクサーバーを作成できず、実稼働サーバーに接続するだけではINSERT INTOを使用するのに十分ではなかったため、次のことを行いました。

  • 本番サーバーのデータベースのバックアップを作成しました
  • テストサーバーにデータベースを復元しました
  • ステートメントへの挿入を実行しました

それはバックドアソリューションですが、問題があったので、私にとってはうまくいきました。

すべてのキーとインデックスを転送するためにSCRIPT TABLE AS / CREATEを使用して空のテーブルを作成したため、SELECT INTOを使用できませんでした。 SELECT INTOは、テーブルが宛先の場所に存在しない場合にのみ機能しますが、キーとインデックスをコピーしないため、手動で行う必要があります。 INSERT INTOステートメントを使用する場合の欠点は、すべての列名を手動で指定する必要があることです。さらに、外部キー制約が失敗した場合、問題が発生する可能性があります。

すべてのanwserのおかげで、いくつかの優れたソリューションがありますが、marc_s anwserを受け入れることにしました。

3
no9

サーバーをリンクする権限がない場合、SQL Serverインポート/エクスポートウィザードを使用して、あるサーバーから別のサーバーにテーブルをインポートする手順は次のとおりです。

  • コピー元のソースデータベースを右クリックします。
  • [タスク]-[データのエクスポート]を選択します。
  • データソースでSql Server Native Clientを選択します。
  • 認証タイプ(SQL ServerまたはWindows認証)を選択します。
  • ソースデータベースを選択します。
  • 次に、宛先を選択します:Sql Server Native Client
  • サーバー名(テーブルのコピー先のサーバー)を入力します。
  • 認証タイプ(SQL ServerまたはWindows認証)を選択します。
  • 宛先データベースを選択します。
  • データのコピーを選択します。
  • リストからテーブルを選択します。
  • [次へ]をクリックし、[すぐに実行]を選択するか、オプションで、後で実行する場合はパッケージをファイルまたはSql Serverに保存することもできます。
  • 終わり
2
live-love

SQL Server Management Studioの[データのインポート/エクスポート...]から実行できます。

2
Vil

送信元/送信先サーバーを選択することはできません。

データベースが同じサーバー上にある場合、これを行うことができます。

テーブルの列が等しい場合(順序を含む!)、これを行うことができます:

INSERT INTO [destination database].[dbo].[destination table]
SELECT *
FROM [source database].[dbo].[source table]

これを一度行いたい場合は、ソースデータベースをバックアップ/復元できます。これをもっと頻繁に行う必要がある場合は、ソースデータベースを定義するSSISプロジェクトを開始し(任意のサーバーで任意の接続を選択できます)、そこにデータを移動するプロジェクトを作成することをお勧めします。詳細はこちらをご覧ください: http://msdn.Microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

2
YvesR

これはいくぶん回避策ですが、私にとってはうまくいきましたが、他の人にとってもこの問題でうまくいくことを願っています:

エクスポートするテーブルでselect SQLクエリを実行し、結果を.xlsとしてドライブに保存できます。

次に、すべての列とインデックスを含むデータを追加するテーブルを作成します。これは、実際のテーブルを右クリックし、[スクリプトに作成]オプションを選択することで簡単に実行できます。

これで、テーブルを追加するDBを右クリックして、[タスク]> [インポート]を選択できます。

インポートエクスポートウィザードが開き、次を選択します。入力データソースとしてMicrosoft Excelを選択し、以前に保存した.xlsファイルを参照して選択します。

次に、宛先サーバーと、すでに作成した宛先テーブルを選択します。

注:IDベースのフィールドがある場合、このデータも挿入されるため、宛先テーブルでIDプロパティを削除することができます。したがって、これをIdentityプロパティとしてのみ使用すると、インポートプロセスがエラーになります。

次に、次を押して終了を押すと、インポートされているレコード数が表示され、エラーが発生しなければ成功を返します。

1
sinod

ソースから宛先にデータをコピーする場合:

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
1
David Brabant

使用可能な場合、さらに別のオプション:c#.net。特に、Microsoft.SqlServer.Management.Smo名前空間。

SSISパッケージのスクリプトコンポーネントで、次のようなコードを使用しています。

var tableToTransfer = "someTable";
var transferringTableSchema = "dbo";

var srvSource = new Server("sourceServer");
var dbSource = srvSource.Databases["sourceDB"];

var srvDestination = new Server("destinationServer"); 
var dbDestination = srvDestination.Databases["destinationDB"];

var xfr = 
    new Transfer(dbSource) {
        DestinationServer = srvDestination.Name,
        DestinationDatabase = dbDestination.Name,
        CopyAllObjects = false,
        DestinationLoginSecure = true,
        DropDestinationObjectsFirst = true,
        CopyData = true
    };

xfr.Options.ContinueScriptingOnError = false; 
xfr.Options.WithDependencies = false; 

xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]);
xfr.TransferData();

Microsoft.SqlServer.Smoライブラリを明示的に検索して参照に追加する必要があったと思います。しかし、それ以外では、これは私のために働いています。

更新:名前空間とライブラリは、私が思い出したよりも複雑でした。

ライブラリの場合、次への参照を追加します。

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

名前空間には、次を追加します。

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo
0
pwilcox