Provider OLE DB di SQL Server Native Client
Il provider OLE DB MicrosoftSQL Server Native Client implementa un'interfaccia OLE DB per i database di MicrosoftSQL Server. Tramite il provider OLE DB SQL Server Native Client è possibile eseguire query distribuite di SQL Server sui dati di istanze remote di SQL Server.
Per creare un server collegato per l'accesso a un database di SQL Server
Eseguire sp_addlinkedserver per creare il server collegato, specificando il nome di rete del server che esegue l'istanza remota di SQL Server come data_source. Per i server collegati SQL Server la specifica del provider SQL Native Client (SQLNCLI) è facoltativa. (L'utilizzo di SQLNCLI e SQL Server reindirizza alla versione più recente del provider OLE DB SQL Server Native Client.)
Ad esempio, per creare il server collegato LinkSQLSrvr che opera sull'istanza di SQL Server in esecuzione nel server il cui nome di rete è NetSQLSrvr, eseguire una delle istruzioni seguenti:
sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr' sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'
In alternativa è possibile definire un server collegato di SQL Server mediante il relativo nome di rete, come illustrato nell'esempio seguente:
sp_addlinkedserver N'NetSQLSrvr'
Quando vengono eseguite query distribuite in un server che esegue un'istanza di SQL Server 2000, è consigliabile applicare SQL Server 2000 Service Pack 4 (SP4). Se SP4 non è stato applicato, eseguire lo script Instcat.sql incluso in SP4 per aggiornare le stored procedure del catalogo.
Quando vengono eseguite query distribuite in un server che esegue SQL Server 7.0 o versione precedente, per garantire il corretto funzionamento delle query distribuite è necessario aggiornare le stored procedure di catalogo della versione precedente. Ad esempio, se un server esegue un'istanza di SQL Server 7.0, è necessario aggiornare le stored procedure di catalogo nel server a SQL Server 2008 prima che sia possibile farvi riferimento in una query distribuita da un server che esegue un'istanza di SQL Server 2008.
Durante l'aggiornamento di una tabella remota di SQL Server, il server o il client locale non riceve alcun set di risultati né alcun messaggio restituito dai trigger attivati per l'aggiornamento.
Se si utilizzano nomi in quattro parti è necessario specificare sempre il nome dello schema. Se in una query distribuita si omette il nome di uno schema, in OLE DB non vengono trovate le tabelle corrispondenti. Quando si fa riferimento a tabelle locali, se non viene specificato il nome del proprietario in SQL Server vengono utilizzati i valori predefiniti. L'istruzione SELECT seguente genera l'errore 7314, anche se è stato eseguito il mapping tra l'account di accesso del server collegato e un utente dbo del database AdventureWorks nel server collegato:
sp_addlinkedserver @server = N'LinkServer',
@srvproduct = N' ',
@provider = N'SQLNCLI',
@datasrc = N'ServerNetName',
@catalog = N'AdventureWorks'
GO
SELECT *
FROM LinkServer.AdventureWorks.dbo.Vendor
Nell'esempio seguente vengono definiti un server collegato e un server remoto che accedono allo stesso computer, il cui nome di rete è othersite. Nella definizione del server collegato viene utilizzato lo stesso nome di rete del server remoto, mentre nella definizione del server remoto viene utilizzato un nome diverso.
/* 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'
È possibile fare riferimento a tali nomi nelle query distribuite o nelle chiamate di procedure remote.
/* 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 meccanismo di mapping degli account di accesso delle stored procedure varia a seconda che siano eseguite mediante un server collegato o server remoti. Per ulteriori informazioni, vedere Collegamento di server.
Considerazioni sulle transazioni con query distribuite
Il provider OLE DB MicrosoftSQL Server Native Client non supporta le transazioni nidificate. È pertanto necessario impostare XACT_ABORT su ON per le operazioni di modifica dei dati all'interno di transazioni che includono più istruzioni Transact-SQL oppure eseguite su viste partizionate distribuite.