Sql server 无法使链接服务器在Sql Azure中工作

Sql server 无法使链接服务器在Sql Azure中工作,sql-server,azure,azure-sql-database,Sql Server,Azure,Azure Sql Database,我们正在使用Azure的试用版。我们正在尝试从SQL 2012内部执行跨服务器查询 我们似乎将本地2012与Azure相关联。当我进入ManagementStudio中的服务器对象->链接服务器时,我看到了我们的Azure数据库 但是如果我试图打开目录和表,我会收到一条错误消息 此版本的SQL server不支持在'Perseus.sys.sp_tables_rowset2'中引用数据库和/或服务器名称 **Perseus是我们在Azure Sql中目录的名称 从本地连接运行查询: SELECT

我们正在使用Azure的试用版。我们正在尝试从SQL 2012内部执行跨服务器查询

我们似乎将本地2012与Azure相关联。当我进入ManagementStudio中的
服务器对象
->
链接服务器
时,我看到了我们的
Azure
数据库

但是如果我试图打开目录和表,我会收到一条错误消息

此版本的SQL server不支持在'Perseus.sys.sp_tables_rowset2'中引用数据库和/或服务器名称

**Perseus是我们在
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

我从这篇文章中知道

所以我不知道怎么回事。我们的管理员认为可能是我们有一个Web Sql帐户,而不是一个业务Sql帐户。这个过时的堆栈链接意味着SQL版本不是问题所在,而是Azure提供链接服务器之前的版本

所以,我想知道

a)我们没有设置正确的东西来提供SQL链接

b)我们受到试验的限制

c)我们是否受到Web SQL版本的限制


d)还有什么吗?

从SQL管理添加链接服务器时,您没有设置默认数据库的选项。所以用下面的方法

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' 

我想这是可行的

需要执行下面提到的三个存储过程来添加SQL Azure。使用下面这些存储过程,我能够查询SQLAzure

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

你真的建立了到珀尔修斯数据库的连接吗?通过查看错误消息,您正在向Azure发送一个包含3部分或4部分名称的查询,但该查询与Azure中的情况不同。请检查您的查询,并将其设置为使用两个部分名称,如果连接到同一数据库,则仅使用三个部分名称

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword';

CREATE DATABASE SCOPED CREDENTIAL MySecurity 
WITH IDENTITY = 'mylogin',
SECRET = 'mypassword';

CREATE EXTERNAL DATA SOURCE MyDbAccess
WITH (
    TYPE=RDBMS,
    LOCATION='server name',
    DATABASE_NAME='db_name',
    CREDENTIAL= MySecurity);

CREATE EXTERNAL TABLE MyExtTable (
    [Id] [int]  NOT NULL,
    [Name] [varchar(20)] NULL)
WITH
(DATA_SOURCE = MyDbAccess);
之后,您可以直接使用它:

从MyExtTable中选择*


只是把它扔出去,我知道这是一个老帖子,但我仍然偶然发现它,发现它很有用,所以也许它仍然可以帮助其他人。。。无论如何,我遇到了这个错误,我的问题是我不能打字。对于SERVER.Database.dbo.tableName,我在数据库中输入了一个错误。轻松修复复杂的消息:-)

Azure是链接服务器的源还是目标?我相信只有当Azure是本地SQL Server的目标时,它才有效。@Jaxidian正确,Azure是目标,虽然Azure是在我们内部服务器的
链接服务器下注册的,但我们无法通过内部服务器从Azure交叉读取2012@Jaxidian,是的,我们还尝试了一个简单的跨服务器查询。查看我的编辑您的编辑与我发送的编辑完全一致,因此我立即将其删除。;-)下一个问题,您正在连接的用户/登录名有哪些角色?@Jaxidian,该用户是admin(dbo)我收到错误:找不到存储过程“sp_addlinkedserver”。同样使用Azure sql db。使用此功能,您需要进入链接服务器并在“安全”菜单中添加您的用户以及密码,格式如下“user@url.database.windows.net“那么你很好地理解了这一点。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-答案是错误的,3部分/4部分名称在Azure中不起作用,查询必须修改agree@dotnetom,这个答案应该是一个注释。很惊讶它能存活这么久。。。看起来我举了一个旗子就是为了这个原因,版主们,在他们无限的“智慧”中,觉得这是一个答案。我可以补充一下,在我的例子中,server='PROD'与datasource值是一样的。非常感谢,太好了!正是我需要的