2014-10-03 120 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 
); 

當然,你必須用你自己的選擇密碼,數據庫位置等等,用以代替所有的相關細節