web-dev-qa-db-fra.com

Je dois ajouter un serveur lié à un serveur MS Azure SQL

J'ai essayé et essayé, et je ne peux pas me connecter. Je peux me connecter au serveur à l'aide de SSMS, mais je ne peux pas y accéder depuis un serveur local. Voici mon script (en remplaçant les choses entre parenthèses par des informations pertinentes):

EXEC master.dbo.sp_addlinkedserver
    @server     = N'[servername].database.windows.net',
    @srvproduct = N'Any',
    @provider   = N'MSDASQL',
    @datasrc    = N'Azure_ODBC1'
GO

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname  = N'[servername]',
    @useself     = N'False',
    @locallogin  = NULL,
    @rmtuser     = N'[username]',
    @rmtpassword = '[password]'

GO

Error Message

19
user3241483

Comme spécifié dans ckarst deuxième lien, il existe une solution qui fonctionne. Je le poste ici pour vous éviter d'avoir à le rechercher. Comme suggéré par JuanPableJofre dans cette page Commentaires Azure :

À l'aide de SQL 2014, j'ai pu effectuer une requête distribuée entre un serveur SQL local et un SQL Azure. Tout d'abord, j'ai créé un serveur lié:

  • Serveur lié (nom): LinkedServerName
  • Fournisseur: Microsoft OLE DB Provider for SQL Server
  • Nom du produit: (vide)
  • Source de données: Azure-db. Database.windows.net
  • Chaîne du fournisseur: (vide)
  • Emplacement: (vide)
  • Catalogue: nom-db

Dans les options de sécurité: (*)

  • Être fait en utilisant ce contexte de sécurité
  • Connexion à distance: Azure-user-name
  • Avec mot de passe: yourPassword

Dans SSMS, entrez la requête de test suivante:

use [Local_DB] 
go

Select *
from [LinkedServerName].[RemoteDB].[dbo].[Remote_Table] 

Cela a fonctionné à merveille !!

Pour résumer, le serveur lié est créé sur votre base de données locale. Le catalogue (nom de la base de données) est important car Azure peut ne pas vous permettre de le spécifier dans une requête (ie: utilisez azureDBName ne fonctionnera pas sur Azure), donc le nom de la base de données doit être dans le catalogue .

28
Philippe

Malheureusement, Linked Server n'est pas pris en charge par SQL Azure DB. https://msdn.Microsoft.com/en-us/library/Azure/ee336281.aspx

Cependant, comme vous pouvez le voir sur le lien du forum ci-dessous, Microsoft est au courant du scénario et les commentaires des clients ont été entendus. http://feedback.Azure.com/forums/217321-sql-database/suggestions/402636-cross-database-reference

6
ckarst

Bien qu'Azure DB ne prenne pas en charge la définition de serveurs liés, vous pouvez utiliser la fonctionnalité Elastic Query récemment prévisualisée pour définir une "source de données externe" qui n'est qu'une autre base de données Azure DB, et définir des "tables externes" qui sont des références aux tables de cet externe base de données. Vous pouvez ensuite les interroger comme s'il s'agissait d'objets locaux. Ceci est très similaire au concept de serveur lié et est décrit en détail ici .

2
Stuart Ozer