Condividi tramite


sp_addlinkedserver (Transact-SQL)

Crea un server collegato, il quale 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 argomento Convenzioni 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 da 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 univoco del provider OLE DB che corrisponde 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 sistema con il valore PROGID specificato.

  • [ @datasrc= ] 'data_source'
    Nome dell'origine dati secondo la modalità di interpretazione del provider OLE DB. data_source è di tipo nvarchar(4000). Il valore di data_source viene passato come proprietà DBPROP_INIT_DATASOURCE per l'inizializzazione del provider OLE DB.

  • [ @location= ] 'location'
    Posizione del database secondo la modalità di interpretazione del provider OLE DB. location è di tipo nvarchar(4000) e il valore predefinito è NULL. location viene passato come proprietà DBPROP_INIT_LOCATION per l'inizializzazione del provider OLE DB.

  • [ @provstr= ] 'provider_string'
    Stringa di connessione specifica del provider OLE DB che consente di identificare 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 l'inizializzazione del provider OLE DB.

    Quando il server collegato viene creato nel provider OLE DB per SQL Server Native Client, l'istanza può essere specificata tramite la parola chiave SERVER come Server=servername\instancename per specificare un'istanza specifica di SQL Server. servername è il nome del computer in cui SQL Server è in esecuzione mentre 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.

  • [ @catalog= ] 'catalog'
    Catalogo da 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 l'inizializzazione del provider OLE DB. Quando il server collegato viene definito in un'istanza di SQL Server, il catalogo si riferisce al database predefinito a cui viene eseguito il mapping del server collegato.

Valori 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 Microsoft SQL Server Native Client

SQL Server1 (valore predefinito)

 

 

 

 

 

SQL Server

Provider OLE DB per Microsoft SQL Server Native Client

 

SQLNCLI

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

 

 

Nome di database (facoltativo)

SQL Server

Provider OLE DB per Microsoft SQL Server Native Client

 

SQLNCLI

servername\instancename (per istanza specifica)

 

 

Nome di database (facoltativo)

Oracle, versione 8 e successive

Provider Oracle per OLE DB

Qualsiasi

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

MSDASQL

DSN di sistema dell'origine dati ODBC

 

 

 

Origine dati ODBC

Provider Microsoft OLE DB per ODBC

Qualsiasi

MSDASQL

 

 

Stringa di connessione ODBC

 

File system

Provider Microsoft OLE DB per il servizio di indicizzazione

Qualsiasi

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

 

Microsoft 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 Microsoft SQL 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 sicurezzaNota sulla sicurezza

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 
   N'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=N'S1_instance1', 
   @srvproduct=N'',
   @provider=N'SQLNCLI', 
   @datasrc=N'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 = 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

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 = 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.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 utilizza 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 = N'SEATTLE Payroll', 
   @srvproduct = N'',
   @provider = N'MSDASQL', 
   @datasrc = N'LocalServer';
GO

D.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à sulla quale viene eseguito il mapping.

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=N'EXCEL 12.0' ;

E.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 motore di database 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.Utilizzo del provider Microsoft OLE DB per DB2

Nell'esempio seguente viene creato un server collegato denominato DB2 in cui viene utilizzato 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;';

Vedere anche

Riferimento

Stored procedure per query distribuite (Transact-SQL)

sp_addlinkedsrvlogin (Transact-SQL)

sp_addserver (Transact-SQL)

sp_dropserver (Transact-SQL)

sp_serveroption (Transact-SQL)

sp_setnetname (Transact-SQL)

Stored procedure di sistema (Transact-SQL)

Tabelle di sistema (Transact-SQL)