Подтвердить что ты не робот

SQL Azure - таблица копирования между базами данных

Я пытаюсь запустить следующий SQL:

INSERT INTO Suppliers ( [SupplierID], [CompanyName]) 
Select  [SupplierID], [CompanyName] From [AlexDB]..Suppliers

и получил сообщение об ошибке "ссылка на имя базы данных и/или сервера не поддерживается в этой версии SQL-сервера"

Любая идея, как копировать данные между базами данных "внутри" сервера? Я могу загрузить данные на клиент, а затем обратно на сервер, но это очень медленно.

4b9b3361

Ответ 1

Я знаю, что это старо, но у меня было другое ручное решение для одного запуска.

Используя SQL Management Studio R2 SP1 для подключения к azure, я прямо щелкаю по исходной базе данных и выбираю сгенерировать скрипты.

во время работы мастера, после того, как я выбрал свои таблицы, я выбираю, что я хочу выводить в окно запроса, затем нажимаю кнопку "Дополнительно". Примерно на полпути вниз окно свойств существует опция "тип данных для script". Я выбираю это и меняю его на "только данные", затем я заканчиваю мастер.

Все, что я делаю, это проверить script, переставить вставки для ограничений и изменить использование сверху, чтобы запустить его против моей целевой БД.

Затем я нажимаю правой кнопкой мыши на целевую базу данных и выбираю новый запрос, копирую script в него и запускаю его.

Готово, данные перенесены.

надеюсь, что кто-то поможет

Ответ 2

С 2015 года это можно сделать, используя упругие запросы к базе данных, также известные как кросс-запросов к базе данных.

Я создал и использовал этот шаблон, он копирует 1,5 миллиона строк за 20 минут:

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

Ответ 3

К сожалению, нет способа сделать это в одном запросе.

Самый простой способ добиться этого - использовать "Синхронизация данных" для копирования таблиц. Преимущество этого заключается в том, что он также будет работать между серверами и синхронизирует ваши таблицы.

http://azure.microsoft.com/en-us/documentation/articles/sql-database-get-started-sql-data-sync/

На практике у меня не было такого большого опыта работы с "Синхронизацией данных", который работает в процессе производства, но он отлично подходит для однократных заданий.

Одна проблема с "Синхронизацией данных" заключается в том, что она создаст большое количество "синхронизирующих" объектов в вашей базе данных, и удаление фактической "синхронизации данных" с портала Azure может или не может их очистить. Следуйте инструкциям в этой статье, чтобы очистить их вручную:

https://msgooroo.com/GoorooTHINK/Article/15141/Removing-SQL-Azure-Sync-objects-manually/5215

Ответ 4

SQL-Azure не поддерживает инструкцию USE и фактически не выполняет кросс-db-запросы. Таким образом, указанный выше запрос будет терпеть неудачу.

Если вы хотите скопировать/создать резервную копию db на другой sql azure db, вы можете использовать копирование "Тот же сервер" или "Кросс-сервер" в SQL-Azure. Обратитесь к этой статье msdn

Ответ 5

Вы можете использовать такой инструмент, как SQL Data Compare от Red Gate Software, который может перемещать содержимое базы данных из одного места в другое и полностью поддерживает SQL Azure, 14-дневная бесплатная пробная версия должна позволить вам увидеть, может ли она делать то, что вам нужно.

Полное раскрытие: я работаю в Red Gate Software

Ответ 6

Используйте следующие шаги, нет прямого способа сделать это. Но с помощью какого-то трюка мы можем.

Шаг 1: Создайте еще одну таблицу с той же структурой таблицы поставщиков внутри [AlexDB], скажите, что это SuppliersBackup

Шаг 2: Создайте таблицу с той же структурой таблицы поставщиков внутри DesiredDB

Шаг 3: Включите синхронизацию данных между AlexDB..Suppliers и DesiredDB..Поставщики

Шаг 4: Усечение данных от AlexDB..Поставщики

Шаг5: Скопируйте данные из AlexDB..SuppliersBackup в AlexDB..Поставщики

Шаг 6. Теперь запустите синхронизацию

Данные, скопированные в DesiredDB.

Ответ 8

Хорошо, я думаю, что нашел ответ - никак. необходимо переместить данные клиенту или сделать некоторые другие трюки. Здесь ссылка на статью с пояснениями: Ограничения SQL Azure: только одна БД на подключение Но любые другие идеи приветствуются!

Ответ 9

Несколько вариантов (скорее обходные пути):

  • Сгенерировать script с данными
  • Использовать синхронизацию данных в Azure
  • Использовать MS Access (импорт и экспорт) со многими исключениями (например, GUID в Access)
  • Используйте 3-х сторонние инструменты, такие как Red Gate.

К сожалению, нет простого и встроенного способа сделать это до сих пор.

Ответ 10

Если у вас есть версия onprem с sp_addlinkedsrvlogin, вы можете настроить Linked Servers как для исходной, так и для целевой базы данных, тогда вы можете запустить свою вставку в запрос.

См. "Поддержка SQL Server для связанного сервера и распределенные запросы к базе данных Windows Azure SQL" в этом блоге: https://azure.microsoft.com/en-us/blog/announcing-updates-to-windows-azure-sql-database/