SQL Azure - 在数据库之间复制表

Ale*_*nko 27 sql azure azure-sql-database

我试图运行以下SQL:

INSERT INTO Suppliers ( [SupplierID], [CompanyName]) 
Select  [SupplierID], [CompanyName] From [AlexDB]..Suppliers
Run Code Online (Sandbox Code Playgroud)

并收到错误"此版本的sql server不支持对数据库和/或服务器名称的引用"

知道如何在服务器"内部"的数据库之间复制数据吗?我可以将数据加载到客户端然后再返回到服务器,但这非常慢.

Mar*_*nes 68

我知道这已经过时了,但我还有另一个手动解决方案.

使用SQL Management Studio R2 SP1连接到azure,我右键单击源数据库并选择生成脚本.

在向导中,在我选择了表格后,我选择了要输出到查询窗口,然后单击高级.在属性窗口的大约一半处,有一个"脚本数据类型"选项.我选择并将其更改为"仅数据",然后我完成向导.

我所做的只是检查脚本,重新排列插入的约束,并更改顶部的使用以针对我的目标数据库运行它.

然后我右键单击目标数据库并选择新查询,将脚本复制到其中,然后运行它.

完成,数据迁移.

希望有人帮助

  • 如果你只是想复制DATA.那么这是正确的答案. (3认同)
  • 在32票之后,这是一个耻辱,这还没有被接受为答案 (3认同)
  • 除非我误解,这种方法要求数据足够小,以便可以将其全部存储在一个脚本中并复制和粘贴。这不就是下载到客户端然后再次上传到目标数据库的另一种方式吗? (2认同)

Mag*_*agu 17

自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
Run Code Online (Sandbox Code Playgroud)


小智 8

不幸的是,在单个查询中无法做到这一点.

完成它的最简单方法是使用"数据同步"来复制表格.这样做的好处是它也可以在服务器之间工作,并使您的表保持同步.

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


IUn*_*own 4

SQL-Azure 不支持 USE 语句,并且实际上不支持跨数据库查询。所以上面的查询肯定会失败。

如果要将数据库复制/备份到另一个 sql azure 数据库,可以使用 SQL-Azure 中的“同一服务器”复制或“跨服务器”复制。参考这篇msdn文章