Fournisseur OLE DB SQL Server Native Client

Le fournisseur OLE DB de Microsoft SQL Server Native Client fournit une interface OLE DB aux bases de données Microsoft SQL Server. À l'aide du fournisseur OLE DB de SQL Server Native Client, les requêtes distribuées SQL Server peuvent interroger des données stockées dans des instances distantes de SQL Server.

Pour créer un serveur lié d'accès à une base de données SQL Server

  • Exécutez sp_addlinkedserver pour créer le serveur lié en spécifiant le nom réseau du serveur exécutant l'instance distante de SQL Server comme data_source. Pour les serveurs liés SQL Server, la spécification du fournisseur (SQLNCLI) est facultative. (L'utilisation de SQLNCLI et SQL Server vous redirigera vers la version la plus récente du fournisseur SQL Server Native Client OLE DB.)

    Par exemple, pour créer un serveur lié nommé LinkSQLSrvr fonctionnant sur l'instance SQL Server qui est exécutée sur le serveur dont le nom réseau est NetSQLSrvr, exécutez l'une des deux commandes suivantes :

    sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'
    sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'
    

    Vous pouvez également définir un serveur lié SQL Server sous son nom réseau, comme le montre l'exemple suivant :

    sp_addlinkedserver N'NetSQLSrvr'
    

Lorsque des requêtes distribuées sont exécutées sur un serveur exécutant une instance de SQL Server 2000, nous vous recommandons d'appliquer SQL Server 2000 Service Pack 4 (SP4). Si le Service Pack 4 n'a pas été appliqué, vous devez exécuter le script Instcat.sql inclus avec le Service Pack 4 pour mettre à niveau les procédures stockées du catalogue.

Lorsque des requêtes distribuées sont réalisées sur un serveur exécutant SQL Server version 7.0 ou une version antérieure, le catalogue de procédures stockées de la version utilisée doit être mis à niveau pour que les requêtes distribuées fonctionnent convenablement. Par exemple, si un serveur exécute une instance de SQL Server 7.0, les procédures stockées de catalogue sur le serveur doivent être mises à niveau vers SQL Server 2008 pour qu'il puisse être référencé dans une requête distribuée depuis un serveur exécutant une instance de SQL Server 2008.

Lors de la mise à jour d'une table SQL Server distante, le serveur ou le client local ne recevra pas de jeux de résultats ou de messages résultant des déclencheurs activés pour cette mise à jour.

Lorsque vous utilisez des noms à quatre éléments, spécifiez systématiquement le nom du schéma. Si vous n'indiquez pas de nom de schéma dans une requête distribuée, OLE DB ne peut pas trouver les tables. Pour faire référence à des tables locales, SQL Server utilise les paramètres par défaut si aucun nom de propriétaire n'est spécifié. L'instruction SELECT suivante générerait une erreur 7314, même si la connexion du serveur lié était mappée sur un utilisateur dbo dans la base de données AdventureWorks2008R2 du serveur lié :

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks2008R2'
GO
SELECT *
FROM LinkServer.AdventureWorks2008R2.dbo.Vendor

L'exemple suivant définit un serveur lié et un serveur distant capables d'accéder au même ordinateur dont le nom réseau est othersite. La définition du serveur lié utilise le nom réseau du serveur distant, tandis que la définition du serveur distant utilise un autre nom.

/* Create a linked server definition to othersite. */
EXEC sp_addlinkedserver 'othersite', N'SQL Server'

/* Create a remote server definition using a
   fictitious name. */
EXEC sp_addserver 'RPCothersite'

/* Set the fictitious name to the network name far away. */
EXEC sp_setnetname 'RPCothersite', 'othersite'

Ces noms peuvent être référencés dans des requêtes distribuées ou des appels de procédure distante.

/* A distributed query referencing othersite. */
SELECT *
FROM othersite.Northwind.dbo.Employees
/* A remote procedure call to the same server. */
EXEC RPCothersite.master.dbo.sp_who
/* Distributed queries can be used to execute
   stored procedures on the other server. */
EXEC othersite.master.dbo.sp_who

Il existe des différences dans le mécanisme de mappage d'ouverture de session entre les procédures stockées exécutées par l'intermédiaire du serveur lié et les procédures stockées exécutées par l'intermédiaire de serveurs distants. Pour plus d'informations, consultez Liaison des serveurs.

Observations sur les transactions impliquant des requêtes distribuées

Le fournisseur OLE DB de Microsoft SQL Server Native Client ne prend pas en charge les transactions imbriquées. Par conséquent, XACT_ABORT doit être activé (ON) pour les opérations de modification de données dans une transaction impliquant plusieurs instructions Transact-SQL et pour les opérations de modification de données sur des vues distribuées partitionnées.