次のSQLを実行しようとしています:
INSERT INTO Suppliers ( [SupplierID], [CompanyName])
Select [SupplierID], [CompanyName] From [AlexDB]..Suppliers
そして、「データベースやサーバー名への参照は、このバージョンのSQLサーバーではサポートされていません」というエラーを受け取りました。
サーバー内部のデータベース間でデータをコピーする方法はありますか?データをクライアントにロードしてからサーバーに戻すことができますが、これは非常に遅いです。
これは古いことはわかっていますが、1回限りの実行のための別の手動ソリューションがありました。
SQL Management Studio R2 SP1を使用してAzureに接続し、ソースデータベースを右クリックして[スクリプトの生成]を選択します。
ウィザードで、テーブルを選択した後、クエリウィンドウに出力するテーブルを選択し、[詳細]をクリックします。プロパティウィンドウの半分ほど下には、「スクリプトを作成するデータの種類」のオプションがあります。それを選択して「データのみ」に変更し、ウィザードを終了します。
次に行うのは、スクリプトを確認し、挿入の制約を再配置し、ターゲットDBに対して実行するように上部のを変更することだけです。
次に、ターゲットデータベースを右クリックして新しいクエリを選択し、スクリプトをそれにコピーして実行します。
完了、データが移行されました。
それが誰かを助けることを願っています
2015年以降、これは エラスティックデータベースクエリクロスデータベースクエリ とも呼ばれます。
このテンプレートを作成して使用したところ、20分間で150万行がコピーされました。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION='<server>.database.windows.net',
DATABASE_NAME='<db>',
CREDENTIAL= SQL_Credential
);
CREATE EXTERNAL TABLE [dbo].[source_table] (
[Id] BIGINT NOT NULL,
...
)
WITH
(
DATA_SOURCE = RemoteReferenceData
)
SELECT *
INTO target_table
FROM source_table
残念ながら、これを単一のクエリで行う方法はありません。
これを実現する最も簡単な方法は、「データ同期」を使用してテーブルをコピーすることです。これの利点は、サーバー間でも機能し、テーブルの同期を保つことです。
http://Azure.Microsoft.com/en-us/documentation/articles/sql-database-get-started-sql-data-sync/
実際には、本番環境で「Data Sync」を実行した経験はそれほどありませんが、1回限りの仕事では問題ありません。
「データ同期」の1つの問題は、データベースに多数の「同期」オブジェクトが作成され、Azureポータルから実際の「データ同期」を削除すると、それらがクリーンアップされる場合とクリーンアップされない場合があります。この記事の指示に従って、すべてを手動でクリーンアップします。
https://msgooroo.com/GoorooTHINK/Article/15141/Removing-SQL-Azure-Sync-objects-manually/5215
SQL-AzureはUSEステートメントをサポートしておらず、実質的にクロスDBクエリをサポートしていません。したがって、上記のクエリは失敗するはずです。
Dbを別のsql Azure dbにコピー/バックアップする場合は、SQL-Azureで「同じサーバー」コピーまたは「クロスサーバー」コピーを使用できます。 このmsdn記事を参照
Red-Gate Softwareの SQL Data Compare のようなツールを使用して、データベースのコンテンツをある場所から別の場所に移動でき、SQL Azureを完全にサポートできます。 14日間の無料トライアルで、必要なことができるかどうかを確認できます。
完全な開示:私はRed Gate Softwareで働いています
次の手順を使用します。これを行う簡単な方法はありません。しかし、いくつかのトリックによって可能です。
ステップ1:[AlexDB]内に、Suppliersテーブルと同じ構造の別の1つのテーブルを作成し、それをSuppliersBackupと言います。
ステップ2:DesiredDB内に、Suppliersテーブルと同じ構造のテーブルを作成します。
ステップ3:AlexDB..SuppliersとDesiredDB..Suppliers間のデータ同期を有効にする
ステップ4:AlexDB..Suppliersからデータを切り捨てます
ステップ5:データをAlexDB..SuppliersBackupからAlexDB..Suppliersにコピーします
ステップ6:同期を実行します
DesiredDBにコピーされたデータ。
古い投稿ですが、別のオプションは SQL Azure移行ウィザード です。
Sp_addlinkedsrvloginが含まれているonpremバージョンがある場合は、ソースデータベースとターゲットデータベースの両方にリンクサーバーを設定してから、クエリへの挿入を実行できます。
このブログの「Windows Azure SQLデータベースに対するリンクサーバーと分散クエリのSQL Serverサポート」を参照してください。 https://Azure.Microsoft.com/en-us/blog/announcing-updates-to-windows-Azure -sql-database /
わかりました、私は答えを見つけたと思います-方法はありません。クライアントにデータを移動するか、他のいくつかのトリックを実行する必要があります。説明付きの記事へのリンク: SQL Azureの制限:接続ごとに1つのDBのみ しかし、他のアイデアは大歓迎です!
SSMS SQL Serverのインポートおよびエクスポート機能をお勧めします。この機能は、複数の接続構成と、選択したテーブルのサーバー間コピーをサポートしています。 .NET Sql Serverコネクタを試しました。これは、Azure SQLデータベースで非常にうまく機能します。
いくつかのオプション(むしろ回避策):
残念ながら、これまでのところ簡単で組み込みの方法はありません。