SQL Server Native Client OLE DB-Anbieter

Der Microsoft SQL Server Client OLE DB-Anbieter bietet eine OLE DB-Schnittstelle zu Microsoft SQL Server-Datenbanken. Mit dem SQL Server Native Client OLE DB-Anbieter können mit verteilten SQL Server-Abfragen Daten in Remoteinstanzen von SQL Server abgefragt werden.

So erstellen Sie einen Verbindungsserver für den Zugriff auf eine SQL Server-Datenbank

  • Führen Sie sp_addlinkedserver aus, um den Verbindungsserver zu erstellen. Geben Sie dabei den Netzwerknamen des Servers, auf dem die Remoteinstanz von SQL Server läuft, als data_source an. Die Angabe des Anbieters (SQLNCLI) ist für SQL Server-Verbindungsserver optional. (Wenn Sie SQLNCLI verwenden, leitet SQL Server zur neuesten Version des OLE DB-Anbieters von SQL Server Native Client um.)

    Um z. B. einen Verbindungsserver namens LinkSQLSrvr für den Zugriff auf die Instanz von SQL Server, die auf dem Server mit dem Netzwerknamen NetSQLSrvr ausgeführt wird, zu erstellen, geben Sie Folgendes an:

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

    Alternativ können Sie einen SQL Server-Verbindungsserver über seinen Netzwerknamen definieren, was das folgende Beispiel zeigt:

    sp_addlinkedserver N'NetSQLSrvr'
    

Werden verteilte Abfragen für einen Server mit einer Instanz von SQL Server 2000 ausgeführt, wird die Anwendung von SQL Server 2000 Service Pack 4 (SP4) empfohlen. Wenn SP4 nicht angewendet wurde, sollten Sie das im Lieferumfang von SP4 enthaltene Skript Instcat.sql ausführen, um die gespeicherten Prozeduren für Kataloginformationen zu aktualisieren.

Wenn verteilte Abfragen auf einen Server mit SQL Server Version 7.0 oder früher angewendet werden, müssen die gespeicherten Prozeduren für Kataloginformationen der älteren Version aktualisiert werden, um die ordnungsgemäße Ausführung der verteilten Abfragen zu sicherzustellen. Wenn auf einem Server zum z. B. eine Instanz von SQL Server Version 7.0 ausgeführt wird, müssen die gespeicherten Prozeduren für Kataloginformationen auf dem Server auf SQL Server 2008 aktualisiert werden, um Verweise auf den Server in einer verteilten Abfrage von einem Server mit einer Instanz von SQL Server 2008 zu ermöglichen.

Wird eine Remote-SQL Server-Tabelle aktualisiert, erhält der lokale Server oder Client keine Resultsets oder Meldungen von Triggern, die für diese Aktualisierung ausgelöst wurden.

Geben Sie beim Verwenden von vierteiligen Namen immer den Schemanamen an. Wenn in einer verteilten Abfrage kein Schemaname angegeben ist, kann OLE DB die Tabelle nicht finden. In Verweisen auf lokale Tabellen verwendet SQL Server Standardwerte, wenn kein Besitzername angegeben ist. Folgende SELECT-Anweisung generiert den Fehler 7314, selbst wenn der Verbindungsserver-Benutzername einem dbo-Benutzer in der AdventureWorks2008R2-Datenbank auf dem Verbindungsserver zugeordnet ist:

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

In diesem Beispiel wird sowohl ein Verbindungsserver als auch ein Remoteserver definiert, die beide auf denselben Computer mit dem Netzwerknamen othersite zugreifen. Die Verbindungsserverdefinition verwendet als Namen den Netzwerknamen des Remoteservers; die Remoteserverdefinition verwendet einen anderen Namen.

/* 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'

Auf diese Namen kann in verteilten Abfragen oder Remoteprozeduraufrufen verwiesen werden.

/* 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

Der Mechanismus der Benutzernamenzuordnung unterscheidet sich bei gespeicherten Prozeduren, die über Verbindungsserver ausgeführt werden, und gespeicherten Prozeduren, die über Remoteserver ausgeführt werden. Weitere Informationen finden Sie unter Verbindungsserver.

Überlegungen zu Transaktionen mit verteilten Abfragen

Der Microsoft SQL Server Native Client OLE DB-Anbieter unterstützt keine geschachtelten Transaktionen. Deshalb sollte XACT_ABORT für Datenänderungsoperationen in Transaktionen mit mehreren Transact-SQL-Anweisungen sowie für Datenänderungsoperationen, die über verteilte partitionierte Sichten erfolgen, auf ON festgelegt werden.