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)他に何かありますか?
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'
私はこれがうまくいくと思いました。
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
実際にペルセウスデータベースへの接続を設定しましたか?エラーメッセージを確認することで、3部または4部の名前のクエリをAzureに送信していますが、これはAzureの場合とは異なります。クエリを確認し、同じデータベースに接続している場合は2つのパーツ名と3つのパーツ名のみを使用するように設定してください
これは私のために働きます:
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