sp_addlinkedserver (Transact-SQL)

Crée un serveur lié. Un serveur lié autorise l'accès à des sources de données OLE DB par l'intermédiaire de requêtes distribuées et hétérogènes. Lorsqu'un serveur lié est créé à l'aide de sp_addlinkedserver, il est possible d'exécuter des requêtes distribuées sur ce serveur. Si le serveur lié est défini comme une instance de SQL Server, des procédures stockées distantes peuvent être exécutées.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] 
     [ , [ @provider= ] 'provider_name' ]
     [ , [ @datasrc= ] 'data_source' ] 
     [ , [ @location= ] 'location' ] 
     [ , [ @provstr= ] 'provider_string' ] 
     [ , [ @catalog= ] 'catalog' ] 

Arguments

  • [ @server= ] 'server'
    Nom du serveur lié à créer. L'argument server est de type sysname, sans valeur par défaut.

  • [ @srvproduct= ] 'product_name'
    Nom de produit de la source de données OLE DB à ajouter comme serveur lié. product_name est de type nvarchar(128). Sa valeur par défaut est NULL. Si le nom du produit est SQL Server, il n'est pas nécessaire de spécifier provider_name, data_source, location, provider_string et catalog.

  • [ @provider= ] 'provider_name'
    ID de programme unique (PROGID) du fournisseur OLE DB correspondant à la source de données. provider_name doit être unique pour le fournisseur OLE DB spécifié installé sur l'ordinateur actuel. provider_name est de type nvarchar(128). Sa valeur par défaut est NULL ; cependant, si provider_name est omis, SQLNCLI est utilisé. (L'utilisation de SQLNCLI et SQL Server vous redirigera vers la version la plus récente du fournisseur SQL Server Native Client OLE DB.) Le fournisseur OLE DB doit être inscrit dans le Registre avec le PROGID spécifié.

  • [ @datasrc= ] 'data_source'
    Nom de la source de données interprétée par le fournisseur OLE DB. data_source est de type nvarchar(4000). data_source est transmis comme propriété DBPROP_INIT_DATASOURCE pour initialiser le fournisseur OLE DB.

  • [ @location= ] 'location'
    Emplacement de la base de données interprété par le fournisseur OLE DB. location est de type nvarchar(4000). Sa valeur par défaut est NULL. location est passé comme propriété DBPROP_INIT_LOCATION pour initialiser le fournisseur OLE DB.

  • [ @provstr= ] 'provider_string'
    Chaîne de connexion spécifique au fournisseur OLE DB identifiant une source de données unique. provider_string est de type nvarchar(4000). Sa valeur par défaut est NULL. provstr est passé à IDataInitialize ou défini comme propriété DBPROP_INIT_PROVIDERSTRING pour initialiser le fournisseur OLE DB.

    Lorsque le serveur lié est créé sur le fournisseur SQL Server Native Client OLE DB, l'instance peut être spécifiée à l'aide du mot clé SERVER sous la forme SERVER=servername\instancename, afin de spécifier une instance de SQL Server spécifique. servername représente le nom de l'ordinateur sur lequel s'exécute SQL Server, tandis que instancename représente le nom de l'instance SQL Server spécifique à laquelle l'utilisateur doit être connecté.

    Notes

    Pour accéder à une base de données miroir, une chaîne de connexion doit contenir le nom de la base de données. Ce nom est nécessaire pour permettre au fournisseur d'accès aux données d'effectuer des tentatives de basculement. La base de données peut être spécifiée dans le paramètre @provstr ou @catalog. Le cas échéant, la chaîne de connexion peut également fournir un nom de partenaire de basculement. Pour plus d'informations, consultez Établissement de la connexion initiale à une session de mise en miroir de bases de données.

  • [ @catalog= ] 'catalog'
    Catalogue à utiliser lors de l'établissement d'une connexion au fournisseur OLE DB. catalog est de type sysname Sa valeur par défaut est NULL. catalog est passé comme propriété DBPROP_INIT_CATALOG pour initialiser le fournisseur OLE DB. Lorsque le serveur lié est défini sur une instance de SQL Server, le catalogue fait référence à la base de données par défaut sur laquelle le serveur lié est mappé.

Valeurs du code de retour

0 (succès) ou 1 (échec)

Ensembles de résultats

Aucun.

Notes

Le tableau suivant présente les façons dont un serveur lié peut être configuré pour des sources de données accessibles via OLE DB. Un serveur lié peut être configuré au moyen de plusieurs méthodes pour une même source de données ; il peut y avoir plusieurs lignes pour un type de source de données. Le tableau ci-dessous indique également les valeurs des paramètres de sp_addlinkedserver à utiliser pour configurer le serveur lié.

Source de données OLE DB distante

Fournisseur OLE DB

product_name

provider_name

data_source

Emplacement

provider_string

Catalogue

SQL Server

Fournisseur Microsoft SQL Server Native Client OLE DB

SQL Server1 (valeur par défaut)

 

 

 

 

 

SQL Server

Fournisseur Microsoft SQL Server Native Client OLE DB

 

SQLNCLI

Nom réseau de SQL Server (pour l'instance par défaut)

 

 

Nom de base de données (facultatif)

SQL Server

Fournisseur Microsoft SQL Server Native Client OLE DB

 

SQLNCLI

servername\instancename (pour une instance spécifique)

 

 

Nom de base de données (facultatif)

Oracle, version 8 et ultérieure

Fournisseur Oracle pour OLE DB

Any

OraOLEDB.Oracle

Alias de la base de données Oracle

 

 

 

Access/Jet

Fournisseur Microsoft OLE DB pour Jet

Indifférent

Microsoft.Jet.OLEDB.4.0

Nom d'accès complet du fichier de base de données Jet

 

 

 

Source de données ODBC

Fournisseur Microsoft OLE DB pour ODBC

Indifférent

MSDASQL

Système DSN de la source de données ODBC

 

 

 

Source de données ODBC

Fournisseur Microsoft OLE DB pour ODBC

Indifférent

MSDASQL

 

 

Chaîne de connexion ODBC

 

Système de fichiers

Fournisseur Microsoft OLE DB pour le service d'indexation

Indifférent

MSIDXS

Nom du catalogue du Service d'indexation

 

 

 

Feuille de calcul Microsoft Excel

Fournisseur Microsoft OLE DB pour Jet

Indifférent

Microsoft.Jet.OLEDB.4.0

Chemin complet du fichier Excel

 

Excel 5.0

 

Base de données IBM DB2

Fournisseur Microsoft OLE DB pour DB2

Indifférent

DB2OLEDB

 

 

Consultez le fournisseur Microsoft OLE DB pour la documentation DB2.

Nom de catalogue de base de données DB2

1 Cette méthode de configuration impose que le nom du serveur lié soit identique au nom réseau de l'instance de SQL Server distante. Utilisez data_source pour spécifier le serveur.

2 « Indifférent » signifie que le nom du produit n'a pas d'importance.

Le fournisseur Microsoft SQL Server Native Client OLE DB est le fournisseur utilisé avec SQL Server si aucun nom de fournisseur n'est spécifié ou si SQL Server est spécifié comme nom de produit. Même si vous spécifiez l'ancien nom du fournisseur, SQLOLEDB, il est remplacé par SQLNCLI lorsqu'il est persistant pour le catalogue.

Les paramètres data_source, location, provider_string et catalog identifient la ou les bases de données vers lesquelles pointe le serveur. Si un de ces paramètres a la valeur NULL, la propriété d'initialisation OLE DB correspondante n'est pas définie.

Dans un environnement ordonné en clusters, lorsque vous spécifiez des noms de fichiers qui pointent vers des sources de données OLE DB, utilisez le nom UNC (Universal Naming Convention) ou un lecteur partagé pour spécifier l'emplacement.

La procédure sp_addlinkedserver ne peut pas être exécutée dans une transaction définie par l'utilisateur.

Remarque relative à la sécuritéRemarque relative à la sécurité

Lorsqu'un serveur lié est créé à l'aide de sp_addlinkedserver, un mappage automatique par défaut est ajouté pour toutes les connexions locales. Pour les fournisseurs non-SQL Server, les connexions SQL Server authentifiées peuvent accéder au fournisseur sous le compte de service SQL Server. Les administrateurs doivent envisager d'utiliser sp_droplinkedsrvlogin <linkedserver_name>, NULL pour supprimer le mappage global.

Autorisations

Nécessite l'autorisation ALTER ANY LINKED SERVER.

Exemples

A. Utilisation du fournisseur Microsoft SQL Server Native Client OLE DB

Le code exemple suivant crée un serveur lié nommé SEATTLESales. Le nom du produit est SQL Server ; aucun nom de fournisseur n'est utilisé.

USE master;
GO
EXEC sp_addlinkedserver 
   N'SEATTLESales',
   N'SQL Server';
GO

Le code exemple suivant crée un serveur lié appelé S1_instance1 sur une instance de SQL Server à l'aide du fournisseur SQL Server Native Client OLE DB.

EXEC sp_addlinkedserver   
   @server=N'S1_instance1', 
   @srvproduct=N'',
   @provider=N'SQLNCLI', 
   @datasrc=N'S1\instance1';

B. Utilisation du fournisseur Microsoft OLE DB pour Microsoft Access

Le fournisseur Microsoft.Jet.OLEDB.4.0 se connecte aux bases de données Microsoft Access qui utilisent le format 2002-2003. L'exemple suivant crée un serveur lié nommé SEATTLE Mktg.

Notes

L'exemple suivant suppose que Microsoft Access et la base de données exemple Northwind sont installés et que cette dernière se trouve dans C:\MSoffice\Access\Samples.

EXEC sp_addlinkedserver 
   @server = N'SEATTLE Mktg', 
   @provider = N'Microsoft.Jet.OLEDB.4.0', 
   @srvproduct = N'OLE DB Provider for Jet',
   @datasrc = N'C:\MSOffice\Access\Samples\Northwind.mdb';
GO

Le fournisseur Microsoft.ACE.OLEDB.12.0 se connecte aux bases de données Microsoft Access qui utilisent le format 2007. L'exemple suivant crée un serveur lié nommé SEATTLE Mktg.

Notes

L'exemple suivant suppose que Microsoft Access et la base de données exemple Northwind sont installés et que cette dernière se trouve dans C:\MSoffice\Access\Samples.

EXEC sp_addlinkedserver 
   @server = N'SEATTLE Mktg', 
   @provider = N'Microsoft.ACE.OLEDB.12.0', 
   @srvproduct = N'OLE DB Provider for ACE',
   @datasrc = N'C:\MSOffice\Access\Samples\Northwind.accdb';
GO

C. Utilisation du fournisseur Microsoft OLE DB pour ODBC avec le paramètre data_source

Le code exemple suivant crée un serveur lié nommé SEATTLE Payroll qui utilise le fournisseur Microsoft OLE DB pour ODBC (MSDASQL) et le paramètre data_source.

Notes

Le nom de la source de données ODBC spécifiée doit être défini comme DSN système dans le serveur avant d'utiliser le serveur lié.

EXEC sp_addlinkedserver 
   @server = N'SEATTLE Payroll', 
   @srvproduct = N'',
   @provider = N'MSDASQL', 
   @datasrc = N'LocalServer';
GO

D. Utilisation du fournisseur Microsoft OLE DB pour une feuille de calcul Excel

Pour créer une définition de serveur lié utilisant le fournisseur Microsoft OLE DB pour Jet et accéder à une feuille de calcul Microsoft Excel au format 1997 - 2003, vous devez créer préalablement une plage nommée dans Excel. Vous devez pour cela, spécifier les colonnes et les lignes de la feuille de calcul à sélectionner. Le nom de la plage peut correspondre à un nom de table dans une requête distribuée.

EXEC sp_addlinkedserver 'ExcelSource',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   'c:\MyData\DistExcl.xls',
   NULL,
   'Excel 5.0';
GO

Pour accéder aux données d'une feuille de calcul Excel, associez une plage de cellules à un nom. La requête suivante peut s'utiliser pour accéder à la plage nommée SalesData en tant que table en utilisant le serveur lié défini précédemment.

SELECT *
   FROM ExcelSource...SalesData;
GO

Si SQL Server s'exécute sous un compte de domaine qui peut accéder à un partage distant, il est possible d'utiliser un chemin UNC à la place d'un lecteur mappé.

EXEC sp_addlinkedserver 'ExcelShare',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   '\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
   NULL,
   'Excel 5.0';

Pour vous connecter à une feuille de calcul Excel au format Excel 2007, utilisez le fournisseur ACE.

EXEC sp_addlinkedserver @server = N'ExcelDataSource', 
@srvproduct=N'ExcelData', @provider=N'Microsoft.ACE.OLEDB.12.0', 
@datasrc=N'C:\DataFolder\People.xlsx',
@provstr=N'EXCEL 12.0' ;

E. Utilisation du fournisseur Microsoft OLE DB pour Jet pour accéder à un fichier texte

Le code exemple suivant crée un serveur lié pour accéder directement aux fichiers texte, sans lier les fichiers en tant que tables dans un fichier .mdb de Microsoft Access. Le fournisseur est Microsoft.Jet.OLEDB.4.0 ; la chaîne de caractères du fournisseur est Text.

La source de données est le chemin d'accès complet au répertoire qui contient les fichiers texte. Un fichier schema.ini, qui décrit la structure des fichiers texte, doit se trouver dans le même répertoire que les fichiers texte. Pour plus d'informations sur la création d'un fichier Schema.ini, consultez la documentation du moteur de base de données Jet.

--Create a linked server.
EXEC sp_addlinkedserver txtsrv, N'Jet 4.0', 
   N'Microsoft.Jet.OLEDB.4.0',
   N'c:\data\distqry',
   NULL,
   N'Text';
GO

--Set up login mappings.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL;
GO

--List the tables in the linked server.
EXEC sp_tables_ex txtsrv;
GO

--Query one of the tables: file1#txt
--using a four-part name. 
SELECT * 
FROM txtsrv...[file1#txt];

F. Utilisation du fournisseur Microsoft OLE DB pour DB2

Le code exemple suivant crée un serveur lié nommé DB2 qui utilise le Microsoft OLE DB Provider for DB2.

EXEC sp_addlinkedserver
   @server=N'DB2',
   @srvproduct=N'Microsoft OLE DB Provider for DB2',
   @catalog=N'DB2',
   @provider=N'DB2OLEDB',
   @provstr=N'Initial Catalog=PUBS;
       Data Source=DB2;
       HostCCSID=1252;
       Network Address=XYZ;
       Network Port=50000;
       Package Collection=admin;
       Default Schema=admin;';