19

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

我们似乎将本地 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

** 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。

我从这篇文章中知道Azure 支持 Linked Servers

所以我迷失了什么是错的。我们的管理员认为可能是我们有一个 Web-Sql 帐户与一个业务 SQL 帐户。这个Azure Web vs Business SQL过时的 Stack 链接意味着 SQL 版本不是问题,而是早于 Azure 提供链接服务器的日期。

所以,我试图了解是否

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

b)我们受试炼的限制?

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

d)还有什么?

4

5 回答 5

32

需要执行下面提到的三个存储过程来添加 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
于 2015-10-31T04:22:50.343 回答
20

从 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' 

我认为这行得通。

于 2014-02-20T23:43:28.257 回答
1

您是否真的设置了与 perseus 数据库的连接?通过查看错误消息,您正在向 Azure 发送一个包含 3 部分或 4 部分名称的查询,这在 Azure 中不起作用。请检查您的查询并将其设置为使用两部分名称,如果它连接到同一个数据库,则仅使用三部分名称

于 2016-01-20T19:38:35.463 回答
1

这对我有用:

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 中选择 *

于 2018-07-11T01:54:23.803 回答
0

只是把它扔在那里,我知道这是一篇旧帖子,但我仍然偶然发现它并发现它很有帮助,所以也许它仍然可以帮助其他人......无论如何,我遇到了这个错误,我的问题最终是我不能类型。对于 SERVER.Database.dbo.tableName,我在数据库中有错字。轻松修复复杂的声音信息:-)

于 2021-03-11T01:37:12.333 回答