Azure sql database SQLAzure-跨数据库查询

Azure sql database SQLAzure-跨数据库查询,azure-sql-database,Azure Sql Database,我们有两个数据库,比如“D1”和“D2”。每个数据库中都有一个表,比如D1中的T1和D2中的T2。 现在我想在数据库D1中编写一个存储过程,它将访问数据库D2中的表,类似下面的代码 USE D1 GO Create or replace sp_test ( --other detials SELECT * FROM D2.dbo.T2 ) GO 你知道我该怎么做吗 注意:前面我们将两个数据库放在同一台服务器上。所以我没有面临任何问题。但是现在在迁移到Azure之后,我不知

我们有两个数据库,比如“D1”和“D2”。每个数据库中都有一个表,比如D1中的T1和D2中的T2。 现在我想在数据库D1中编写一个存储过程,它将访问数据库D2中的表,类似下面的代码

USE D1
GO
Create or replace sp_test
(
    --other detials 

    SELECT * FROM  D2.dbo.T2
)
GO
你知道我该怎么做吗


注意:前面我们将两个数据库放在同一台服务器上。所以我没有面临任何问题。但是现在在迁移到Azure之后,我不知道如何才能做到这一点。根据我的信息,我们在SQL Azure中没有可用的链接服务器功能

Azure SQL数据库(或SQL Azure)不支持跨数据库查询,因此除了消除这些跨数据库查询之外,没有其他解决方法。

如果您在SQL Azure V12中,并且您的服务器有几个版本相同的数据库,并且您不会永久依赖跨数据库事务(我只是想说几件事,请注意,对于跨数据库查询,这仍然需要在应用程序级别执行),您可能希望使用sp_bindsession。如果幸运的话,您可能会在同一台服务器上创建两个数据库。建议不要进行任何应用程序开发,而是一次性开发。

这现在在SQL Azure中是可能的。基本上,您需要在D1中创建一个外部数据源,并在D1中创建一个与目标表匹配的永久表在D2中

像这样的

USE D1
-- Not sure if the following line is necessary. Omit it and if SQL Squeals, put it in.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MasterKeyPassword';
CREATE DATABASE SCOPED CREDENTIAL D2User WITH IDENTITY='D2UserID', SECRET='D2UserPassword';
CREATE EXTERNAL DATA SOURCE D2DataSource
WITH
(
    TYPE=RDBMS,
    LOCATION='d2.database.windows.net',
    DATABASE_NAME='D2',
    CREDENTIAL=D2User
);
CREATE EXTERNAL TABLE [dbo].[T2](
    [ID] [INT] NOT NULL,
    [Info] [NVARCHAR] (25) NULL
)
WITH
(
    DATA_SOURCE = D2DataSource
);
当然,您必须用自己选择的密码、数据库位置等替换所有相关细节