web-dev-qa-db-ja.com

リンクサーバーをSQLAzureで動作させることができません

Azureの試用版を使用しています。 SQL2012から社内でクロスサーバークエリを実行しようとしています。

ローカルの2012年はAzureにリンクされているようです。 ManagementStudioで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.

これと同じ社内SQL2012 Serverは、クロスサーバークエリとリンクサーバーを介してその構造を表示することにより、社内2008に接続できます。

この記事からわかります Azureはリンクサーバーをサポートしています

だから私は何が悪いのか迷っています。管理者は、WebSQLアカウントとビジネスSQLアカウントを持っている可能性があると考えています。この AzureWebとBusinessSQL 古いスタックリンクは、SQLバージョンが問題ではないことを意味しますが、Azureがリンクサーバーを提供したときよりも前の日付です。

だから、私は理解しようとしています

a)SQLリンクを提供するための適切な設定をしていませんか?

b)私たちは裁判によって制限されていますか?

c)Web SQLのバージョンによって制限されていますか?

d)他に何かありますか?

17
Dave Alperovich

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' 

私はこれがうまくいくと思いました。

15
Krishna

SQL Azureを追加するには、以下の3つのストアドプロシージャを実行する必要があります。以下のストアドプロシージャを使用して、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
18
Dilip Nannaware

実際にペルセウスデータベースへの接続を設定しましたか?エラーメッセージを確認することで、3部または4部の名前のクエリをAzureに送信していますが、これはAzureの場合とは異なります。クエリを確認し、同じデータベースに接続している場合は2つのパーツ名と3つのパーツ名のみを使用するように設定してください

1
Satya_MSFT

これは私のために働きます:

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);

その後、あなたはそれを使うことができます:

SELECT * FROM MyExtTable

0