2013-05-06 49 views
14

我們正在使用Azure的試用版。我們正試圖從我們的SQL 2012內部執行跨服務器查詢。無法讓鏈接服務器在Sql Azure中工作

我們似乎已將本地2012與Azure相關聯。當我在管理工作室進入Server Object - >Linked Servers時,我看到我們的Azure數據庫。

但是,如果我嘗試打開目錄和表格,我得到一個錯誤信息說

Reference to database and/or server name in 'Perseus.sys.sp_tables_rowset2' is not supported in this version of SQL Server

** 英仙座是我們Azure Sql目錄的名稱。

運行從本地連接的查詢:

SELECT * FROM [azureDBServer].[Perseus].[dbo].[accounts] 

結果是:

OLE DB provider "SQLNCLI11" for linked server "azureDBServer" returned message 
"Unspecified error". Msg 40515, Level 16, State 2, Line 1 Reference to database and/or 
server name in 'Perseus.sys.sp_tables_info_90_rowset' is not supported in this version of 
SQL Server. 

此相同的房子SQL 2012服務器是能夠通過跨服務器查詢來連接到我們2008年的內部和通過鏈接服務器查看其結構。

我從這篇文章中知道Azure supports Linked Servers

所以我失去了什麼是錯的。我們的管理員認爲這可能是因爲我們有一個Web-Sql賬戶和一個商業SQL賬戶。這個Azure Web vs Business SQL過期的Stack鏈接意味着SQL版本不是問題,但Azure提供鏈接服務器之前的日期。

所以,我想了解,如果

一)我們沒有建立正確的事情,提供SQL鏈接?

b)我們受審判限制嗎?

c)我們是否受限於Web SQL版本?

d)什麼?

+1

是Azure的源或目標鏈接服務器?我相信只有Azure是內部部署SQL Server的目標時才能使用。 – Jaxidian 2013-05-06 16:48:48

+1

@Jaxidian正確,Azure是目標,雖然Azure在我們內部服務器的「Linked Servers」下注冊,但我們無法通過我們內部的2012 – 2013-05-06 16:50:11

+1

@Jaxidian從Azure交叉讀取,是的,我們也嘗試了一個簡單的跨服務器查詢。看到我的編輯 – 2013-05-06 17:07:05

回答

7

從SQL Management添加鏈接的服務器時,您沒有設置默認數據庫的選項。所以使用下面的東西

EXEC sp_addlinkedserver 
@server='name for referring locally', -- here you can specify the name of the linked server 
@srvproduct='',  
@provider='sqlncli', -- using SQL Server native client 
@datasrc='AzureMachineName.database.windows.net', -- add here your server name 
@location='', 
@provstr='', 
@catalog='yourdatabasename' 

我想這個作品。

+4

我得到的錯誤:無法找到存儲過程'sp_addlinkedserver'。還使用Azure的SQL數據庫。 – 2014-09-01 22:07:41

7

需要執行下面提到的三個存儲過程來添加SQL Azure。使用下面的這些存儲過程,我能夠查詢SQL Azure。

EXEC sp_addlinkedserver 
@server='PROD', 
@srvproduct='',  
@provider='sqlncli', 
@datasrc='azureserver.database.windows.net', 
@location='', 
@provstr='', 
@catalog='database name' 


EXEC sp_addlinkedsrvlogin 
@rmtsrvname = 'PROD', 
@useself = 'false', 
@rmtuser = 'Azure login', 
@rmtpassword = 'password' 

EXEC sp_serveroption 'PROD', 'rpc out', true 
+0

可能我只是添加了那個server ='PROD'就和我的情況下的數據源值一樣。非常感謝。 – ozzy432836 2016-07-11 12:45:37

+0

優秀!正是我所需要的 – 2017-02-07 00:10:30

1

您是否實際設置了連接perseus數據庫?通過查看錯誤消息,您正在向Azure發送帶有3部分或4部分名稱的查詢,該查詢在Azure中不起作用。請檢查您的查詢,並將其設置爲使用2部分名稱和只有三個部分的名稱,如果它連接到同一個數據庫

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/10967835) – dotnetom 2016-01-21 04:46:23

+0

答案是錯誤,3部分/ 4部分名稱在Azure中不起作用並且查詢必須修改 – 2016-01-21 23:55:57

+0

同意@dotnetom,此答案真的應該是一個評論。驚訝它倖存了這麼長時間...看起來我舉起一面旗幟,正是因爲這個原因,主持人,以他們無限的「智慧」感到這是一個答案。 – 2018-01-05 05:24:55

0

我有同樣的問題,它也將解決,如果你不使用星號在你的SELECT部分​​。

SELECT Row1, Row2 FROM table 

將工作

SELECT * FROM table 

不會

+0

請詳細說明一下?我不明白星號與鏈接表有什麼關係。你的例子讓我感到困惑,你似乎沒有從外部數據庫引用表。鏈接數據庫的典型語法是'SELECT * FROM [數據庫服務器名稱]。[DB/Catalog]。[dbo]。[Table Name]'。您只使用表格名稱會遺漏鏈接。 – 2018-01-05 05:22:19

相關問題