2014-10-03 60 views
0

我们有两个数据库,比如说'D1'和'D2'。每个数据库中都有一个表格,比如D1中的T1和D2中的T2。 现在我想写数据库D1将访问表数据库D2类似下面的代码存储过程...SQL Azure - 跨数据库查询

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

    SELECT * FROM D2.dbo.T2 
) 
GO 

任何想法,我该怎么办呢?

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

回答

2

Azure的SQL数据库(或SQL Azure的)不支持跨数据库查询,所以没有变通除了摆脱那些跨数据库的查询......

0

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

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 
); 

当然,你必须用你自己的选择密码,数据库位置等等,用以代替所有的相关细节