无法在SQL Azure中进行跨数据库查询

时间:2017-08-16 14:00:55

标签: azure-sql-database

我在同一个SQL Azure服务器上有2个DB,并且我在两个DB上都有相同的表(TB1),现在我想从DB2的TB1读取数据并将数据插入到DB1的TB1中。 我正在使用以下查询但收到错误。

insert into TB1 select 1,* from [DB2].dbo.TB1

错误消息

  

Msg 40515,Level 15,State 1,Line 16

     

此版本的SQL Server不支持在“DB2.dbo.TB1”中引用数据库和/或服务器名称。

3 个答案:

答案 0 :(得分:5)

是的,您可以在SQL Azure上使用弹性查询功能。这是您执行跨数据库查询的唯一方法。

以下是详细的查询:

在DB1中运行以下查询(因为您说过从DB2读取TB1并将这些数据插入到DB1中的TB2中)

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'STro*ngPaSSe0rD';

CREATE DATABASE SCOPED CREDENTIAL Login
WITH IDENTITY = 'Login',
SECRET = 'STro*ngPaSSe0rD';

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
    TYPE=RDBMS,
    LOCATION='myserver.database.windows.net',
    DATABASE_NAME='DB2',
    CREDENTIAL= Login
);




CREATE EXTERNAL TABLE [dbo].[TB1]
(
    [Columns] [DataTypes] 
)
WITH (DATA_SOURCE = [RemoteReferenceData])

完成这些步骤后,您可以像普通表一样查询外部表。虽然使用外部表时存在一些限制,但您无法将数据插入 EXTERNAL TABLE(参考表)< /强>

答案 1 :(得分:0)

您可以使用SQL Azure上的弹性查询功能执行跨数据库查询。

您必须创建外部数据源和外部表才能查询其他SQL Azure数据库上的表。 This文章说明了如何做到这一点。

希望这有帮助。

答案 2 :(得分:0)

Azure支持此跨数据库查询功能since 2015,但需要一些extra setup才能工作和弹性查询。

第一步是创建安全凭证:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL DB2Security 
WITH IDENTITY = '<username>',
SECRET = '<password>';

&#34;用户名&#34;和#34;密码&#34;应该是用于登录DB2数据库的用户名和密码。

现在您可以使用它来定义外部数据源,因此DB1可以连接到DB2:

CREATE EXTERNAL DATA SOURCE DB2Access
WITH (
    TYPE=RDBMS,
    LOCATION='myservernotyours.database.secure.windows.net',
    DATABASE_NAME='DB2',
    CREDENTIAL= DB2Security);

最后,使用以前的外部数据源将TB1作为外部表映射到DB2数据库:

CREATE EXTERNAL TABLE dbo.TB1FromDB2(
    ID int,
    Val varchar(50))
WITH
(
    DATA_SOURCE = DB2Access);

您也可以使用Azure SQL Data Sync完成此操作,但数据会复制到一个数据库中,此功能仍然是预览版本(May / 2018),您始终可以看到最旧的数据(最小的可配置间隔时间)每次同步都是5分钟。)