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です。
誰かが私の問題の正しい解決策を教えてくれますか?
これを試して:
Script Table As / Create Script
ステップのスクリプトを使用して、ターゲットサーバーにテーブルを作成します
ターゲットサーバーで、T-SQLステートメントを発行できます。
INSERT INTO dbo.YourTableNameHere
SELECT *
FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
これでうまくいくはずです。
さらに別のオプションを表示するために(SQL Server 2008以降の場合):
タスク/スクリプトの生成にスクリプトテーブルオプションがあります!私も最初は見逃しました!ただし、そこに挿入スクリプトを生成できます(非常に優れた機能ですが、非常に直感的ではありません)。
「スクリプトオプションの設定」のステップに到達したら、「詳細」タブに移動します。
説明されている手順 ここ (写真は理解できますが、ラトビア語で書いています)。
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>
キックのためだけに。
リンクサーバーを作成できず、実稼働サーバーに接続するだけではINSERT INTO
を使用するのに十分ではなかったため、次のことを行いました。
それはバックドアソリューションですが、問題があったので、私にとってはうまくいきました。
すべてのキーとインデックスを転送するためにSCRIPT TABLE AS / CREATE
を使用して空のテーブルを作成したため、SELECT INTO
を使用できませんでした。 SELECT INTO
は、テーブルが宛先の場所に存在しない場合にのみ機能しますが、キーとインデックスをコピーしないため、手動で行う必要があります。 INSERT INTO
ステートメントを使用する場合の欠点は、すべての列名を手動で指定する必要があることです。さらに、外部キー制約が失敗した場合、問題が発生する可能性があります。
すべてのanwserのおかげで、いくつかの優れたソリューションがありますが、marc_s anwserを受け入れることにしました。
サーバーをリンクする権限がない場合、SQL Serverインポート/エクスポートウィザードを使用して、あるサーバーから別のサーバーにテーブルをインポートする手順は次のとおりです。
SQL Server Management Studioの[データのインポート/エクスポート...]から実行できます。
送信元/送信先サーバーを選択することはできません。
データベースが同じサーバー上にある場合、これを行うことができます。
テーブルの列が等しい場合(順序を含む!)、これを行うことができます:
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
これはいくぶん回避策ですが、私にとってはうまくいきましたが、他の人にとってもこの問題でうまくいくことを願っています:
エクスポートするテーブルでselect SQLクエリを実行し、結果を.xlsとしてドライブに保存できます。
次に、すべての列とインデックスを含むデータを追加するテーブルを作成します。これは、実際のテーブルを右クリックし、[スクリプトに作成]オプションを選択することで簡単に実行できます。
これで、テーブルを追加するDBを右クリックして、[タスク]> [インポート]を選択できます。
インポートエクスポートウィザードが開き、次を選択します。入力データソースとしてMicrosoft Excelを選択し、以前に保存した.xlsファイルを参照して選択します。
次に、宛先サーバーと、すでに作成した宛先テーブルを選択します。
注:IDベースのフィールドがある場合、このデータも挿入されるため、宛先テーブルでIDプロパティを削除することができます。したがって、これをIdentityプロパティとしてのみ使用すると、インポートプロセスがエラーになります。
次に、次を押して終了を押すと、インポートされているレコード数が表示され、エラーが発生しなければ成功を返します。
ソースから宛先にデータをコピーする場合:
use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
使用可能な場合、さらに別のオプション: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ライブラリを明示的に検索して参照に追加する必要があったと思います。しかし、それ以外では、これは私のために働いています。
更新:名前空間とライブラリは、私が思い出したよりも複雑でした。
ライブラリの場合、次への参照を追加します。
名前空間には、次を追加します。