2013-05-06 48 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

相关问题