SQL Azure - 跨数据库查询

时间:2014-10-03 01:01:54

标签: 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之后,我不知道如何才能做到这一点。另外根据我的信息,我们没有SQL-Azure中提供的链接服务器功能。

3 个答案:

答案 0 :(得分:2)

Azure SQL数据库(或SQL Azure)不支持跨数据库查询,因此除了摆脱那些跨数据库查询之外没有其他工作......

答案 1 :(得分:0)

如果您使用的是SQL Azure V12并且您的服务器有一些具有相同版本的数据库,并且您不是永久依赖于跨数据库事务(我只是为了一些事情,请注意,不是为了跨数据库查询,这个你仍然需要在应用程序级别执行),您可能希望使用sp_bindsession。如果你足够幸运,你可能会在同一台服务器上找到两个数据库。该建议不适用于任何应用程序开发,而是一次性的事情。

答案 2 :(得分:0)

现在可以在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
);

当然,您必须使用您自己选择的密码,数据库位置等替换所有相关详细信息。