Condividi tramite


sp_addlinkedserver (Transact-SQL)

Viene creato un server collegato che consente l'accesso a query distribuite ed eterogenee in origini dati OLE DB. Dopo avere creato un server collegato tramite sp_addlinkedserver, è possibile eseguire le query distribuite sul server. Se il server collegato viene definito come un'istanza di SQL Server, è possibile eseguire stored procedure remote.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @server= ] 'server'
    Nome del server collegato da creare. server è di tipo sysname e non prevede alcun valore predefinito.

  • [ @srvproduct= ] 'product_name'
    Nome del prodotto dell'origine dati OLE DB che si desidera aggiungere come server collegato. product_name è di tipo nvarchar(128) e il valore predefinito è NULL. Se è SQL Server, non è necessario specificare provider_name, data_source, location, provider_string e catalog.

  • [ @provider= ] 'provider_name'
    PROGID (Unique Programmatic Identifier) del provider OLE DB corrispondente a questa origine dati. provider_name deve essere univoco per il provider OLE DB specificato installato nel computer corrente. provider_name è di tipo nvarchar(128) e il valore predefinito è NULL. Tuttavia se provider_name viene omesso, viene utilizzato SQLNCLI. L'utilizzo di SQLNCLI e SQL Server comporta il reindirizzamento alla versione più recente del provider OLE DB per SQL Server Native Client. Il provider OLE DB deve essere registrato nel Registro di configurazione con il valore PROGID specificato.

  • [ @datasrc= ] 'data_source'
    Nome dell'origine dati interpretato dal provider OLE DB. data_source è di tipo nvarchar(4000). data_source viene passato come proprietà DBPROP_INIT_DATASOURCE per inizializzare il provider OLE DB.

  • [ @location= ] 'location'
    Percorso del database interpretato dal provider OLE DB. location è di tipo nvarchar(4000) e il valore predefinito è NULL. location viene passato come proprietà DBPROP_INIT_LOCATION per inizializzare il provider OLE DB.

  • [ @provstr= ] 'provider_string'
    Stringa di connessione specifica per il provider OLE DB che identifica un'origine dati univoca. provider_string è di tipo nvarchar(4000) e il valore predefinito è NULL. provstr viene passato a IDataInitialize o impostato come proprietà DBPROP_INIT_PROVIDERSTRING per inizializzare il provider OLE DB.

    Quando il server collegato viene creato mediante il provider OLE DB per SQL Server Native Client, è possibile utilizzare la parola chiave SERVER nel formato SERVER==servername\instancename per specificare un'istanza specifica di SQL Server. servername è il nome del computer che esegue SQL Server e instancename è il nome dell'istanza specifica di SQL Server a cui verrà connesso l'utente.

    [!NOTA]

    Per accedere a un database con mirroring, è necessario che la stringa di connessione contenga il nome del database, al fine di consentire i tentativi di failover da parte del provider di accesso ai dati. È possibile specificare il database nel parametro @provstr o @catalog. Facoltativamente, la stringa di connessione può specificare anche il nome di un partner di failover. Per ulteriori informazioni, vedere Creazione della connessione iniziale a una sessione di mirroring del database.

  • [ @catalog= ] 'catalog'
    Catalogo che si desidera utilizzare per una connessione al provider OLE DB. catalog è di tipo sysname e il valore predefinito è NULL. catalog viene passato come proprietà DBPROP_INIT_CATALOG per inizializzare il provider OLE DB. Quando il server collegato viene definito in un'istanza di SQL Server, il catalogo si riferisce al database predefinito a cui è mappato il server collegato.

Valori di codice restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Nessuno

Osservazioni

Nella tabella seguente vengono descritte le possibili configurazioni di un server collegato per origini dati accessibili tramite OLE DB. Un server collegato può essere configurato in modi diversi per un'origine dati specifica. Per un tipo di origine dati possono essere disponibili più righe. Nella tabella vengono descritti inoltre i valori di parametro della stored procedure sp_addlinkedserver da utilizzare per la configurazione del server collegato.

Origine dati OLE DB remota

Provider OLE DB

product_name

provider_name

data_source

location

provider_string

catalog

SQL Server

Provider OLE DB per MicrosoftSQL Server Native Client

SQL Server1 (valore predefinito)

 

 

 

 

 

SQL Server

Provider OLE DB per MicrosoftSQL Server Native Client

 

SQLNCLI

Nome di rete di SQL Server (per l'istanza predefinita)

 

 

Nome di database (facoltativo)

SQL Server

Provider OLE DB per MicrosoftSQL Server Native Client

 

SQLNCLI

nomeserver\nomeistanza (per l'istanza specifica)

 

 

Nome di database (facoltativo)

Oracle

Provider Microsoft OLE DB per Oracle

Qualsiasi prodotto2

MSDAORA

Alias SQL*Net per database Oracle

 

 

 

Oracle, versione 8 e successive

Provider Oracle per OLE DB

Qualsiasi prodotto

OraOLEDB.Oracle

Alias per il database Oracle

 

 

 

Access/Jet

Provider Microsoft OLE DB per Jet

Qualsiasi prodotto

Microsoft.Jet.OLEDB.4.0

Percorso completo del file di database Jet

 

 

 

Origine dati ODBC

Provider Microsoft OLE DB per ODBC

Qualsiasi prodotto

MSDASQL

DSN di sistema dell'origine dati ODBC

 

 

 

Origine dati ODBC

Provider Microsoft OLE DB per ODBC

Qualsiasi prodotto

MSDASQL

 

 

Stringa di connessione ODBC

 

File system

Provider Microsoft OLE DB per il servizio di indicizzazione

Qualsiasi prodotto

MSIDXS

Nome del catalogo del Servizio di indicizzazione

 

 

 

Foglio di calcolo di Microsoft Excel

Provider Microsoft OLE DB per Jet

Qualsiasi prodotto

Microsoft.Jet.OLEDB.4.0

Percorso completo del file di Excel

 

Excel 5.0

 

Database IBM DB2

Provider Microsoft OLE DB per DB2

Qualsiasi prodotto

DB2OLEDB

 

 

Vedere la documentazione del provider Microsoft OLE DB per DB2.

Nome del catalogo del database DB2

1 Questo metodo di configurazione di un server collegato impone che il nome del server corrisponda al nome di rete dell'istanza remota di SQL Server. Utilizzare data_source per specificare il server.

2 "Qualsiasi prodotto" indica che è possibile specificare qualsiasi nome.

Il provider OLE DB per MicrosoftSQL Server Native Client (SQLNCLI) viene utilizzato con SQL Server se non viene specificato alcun nome di provider o se come nome di prodotto viene specificato SQL Server. Anche se si specifica il nome del provider meno recente, SQLOLEDB, verrà modificato in SQLNCLI se persiste nel catalogo.

I parametri data_source, location, provider_string e catalog identificano il database o i database a cui punta il server collegato. Se uno di questi parametri è NULL, la proprietà di inizializzazione OLE DB corrispondente non viene impostata.

In un ambiente cluster, quando si specificano nomi di file che puntano a origini dati OLE DB, la posizione deve essere specificata nel formato UNC oppure deve corrispondere a un'unità condivisa.

La stored procedure sp_addlinkedserver non può essere eseguita all'interno di una transazione definita dall'utente.

Nota sulla protezioneNota sulla protezione

Quando si crea un server collegato tramite sp_addlinkedserver, viene aggiunto un mapping automatico predefinito per tutti gli account di accesso locali. Per i provider non SQL Server, gli account di accesso autenticati di SQL Server potrebbero essere in grado di accedere al provider con l'account del servizio SQL Server. Si consiglia agli amministratori di considerare l'utilizzo di sp_droplinkedsrvlogin <linkedserver_name>, NULL per rimuovere il mapping globale.

Autorizzazioni

È richiesta l'autorizzazione ALTER ANY LINKED SERVER.

Esempi

A. Utilizzo del provider OLE DB per Microsoft SQL Server Native Client

Nell'esempio seguente viene creato un server collegato denominato SEATTLESales. Il nome del prodotto è SQL Server e non vengono utilizzati nomi di provider.

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

Nell'esempio seguente viene creato un server collegato S1_instance1 in un'istanza di SQL Server tramite il provider OLE DB per SQL Server Native Client.

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

B. Utilizzo del provider Microsoft OLE DB per Microsoft Access

Il provider Microsoft.Jet.OLEDB.4.0 si connette al database di Microsoft Access che utilizza il formato 2002-2003. Nell'esempio seguente viene creato un server collegato denominato SEATTLE Mktg.

[!NOTA]

In questo esempio si presume che siano installati sia Microsoft Access che il database di esempio Northwind e che il database Northwind sia disponibile in C:\Msoffice\Access\Samples.

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

Il provider Microsoft.ACE.OLEDB.12.0 si connette al database di Microsoft Access che utilizza il formato 2007. Nell'esempio seguente viene creato un server collegato denominato SEATTLE Mktg.

[!NOTA]

In questo esempio si presume che siano installati sia Microsoft Access che il database di esempio Northwind e che il database Northwind sia disponibile in C:\Msoffice\Access\Samples.

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

Utilizzo del provider Microsoft OLE DB per Oracle

Nell'esempio seguente viene creato il server collegato denominato LONDON Mktg che utilizza il provider Microsoft OLE DB per Oracle. Si presuppone che l'alias di SQL*Net per il database Oracle sia MyServer.

EXEC sp_addlinkedserver
   @server = 'LONDON Mktg',
   @srvproduct = 'Oracle',
   @provider = 'MSDAORA',
   @datasrc = 'MyServer'
GO

D. Utilizzo del provider Microsoft OLE DB per ODBC con il parametro data_source

Nell'esempio seguente viene creato un server collegato denominato SEATTLE Payroll che consente di utilizzare il provider Microsoft OLE DB per ODBC (MSDASQL) e il parametro data_source.

[!NOTA]

Il nome dell'origine dati ODBC specificato deve essere definito come System DSN nel server prima di utilizzare il server collegato.

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

E. Utilizzo del provider Microsoft OLE DB per un foglio di calcolo di Excel

Per creare una definizione di server collegato utilizzando il provider Microsoft OLE DB per Jet per accedere a un foglio di calcolo di Excel nel formato 1997 - 2003, è innanzitutto necessario creare in Excel un intervallo denominato specificando le colonne e le righe del foglio di lavoro di Excel che si desidera selezionare. È quindi possibile fare riferimento al nome dell'intervallo come a un nome di tabella in una query distribuita.

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

Per accedere ai dati di un foglio di calcolo di Microsoft Excel, assegnare un nome a un intervallo di celle. Per accedere a un intervallo denominato SalesData come tabella tramite il server collegato impostato nell'esempio precedente è possibile utilizzare la query seguente.

SELECT *
   FROM ExcelSource...SalesData
GO

Se SQL Server è in esecuzione in un account di dominio che ha accesso a una condivisione remota, è possibile utilizzare un percorso UNC invece di un'unità mappata.

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

Per connettersi a un foglio di calcolo di Excel nel formato 2007 utilizzare il provider ACE.

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

F. Utilizzo del provider Microsoft OLE DB per Jet per accedere a un file di testo

Nell'esempio seguente viene creato un server collegato per accedere direttamente a file di testo senza dover collegare i file come tabelle in un file di Access con estensione mdb. Il provider è Microsoft.Jet.OLEDB.4.0 e la stringa corrispondente è Text.

L'origine dati corrisponde al percorso completo della directory che include i file di testo. In questa directory è necessario creare un file schema.ini che descriva la struttura dei file di testo. Per ulteriori informazioni sulla creazione di un file Schema.ini, vedere la documentazione del modulo di gestione di database Jet.

--Create a linked server.
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 
   'Microsoft.Jet.OLEDB.4.0',
   'c:\data\distqry',
   NULL,
   '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]

G. Utilizzo del provider Microsoft OLE DB per DB2

Nell'esempio seguente viene creato un server collegato denominato DB2 che utilizza Microsoft OLE DB Provider for DB2.

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