Accesso a dati esterni

Per accedere ai dati di un'origine dei dati OLE DB è necessario fornire a SQL Server le informazioni seguenti:

  • Il nome del provider OLE DB che espone l'origine dei dati.

  • Tutte le informazioni necessarie al provider OLE DB per individuare l'origine dei dati.

  • Il nome di un oggetto che l'origine dei dati OLE DB può esporre come set di righe o una query che è possibile inviare al provider OLE DB per indurre l'origine dei dati a esporre un set di righe. Gli oggetti che è possibile esporre come set di righe sono denominati tabelle remote. Le query che generano set di righe sono denominate query pass-through.

  • Facoltativamente, è possibile fornire a SQL Server ID di accesso validi per l'origine dei dati OLE DB.

SQL Server supporta l'utilizzo di riferimenti a origini dei dati OLE DB eterogenee nelle istruzioni Transact-SQL, specificati tramite il nome del server collegato o il nome ad hoc del computer.

Nomi dei server collegati

Un server collegato è un server virtuale definito in SQL Server specificando tutte le informazioni necessarie per accedere a un'origine dei dati OLE DB. Il nome di un server collegato viene definito tramite la stored procedure di sistema sp_addlinkedserver. La definizione del server collegato contiene tutte le informazioni necessarie per individuare l'origine dei dati OLE DB. Gli account di accesso SQL Server locali vengono mappati ad account di accesso nel server collegato tramite sp_addlinkedsrvlogin.

È possibile fare riferimento alle tabelle remote utilizzando il nome del server collegato in uno dei formati seguenti:

  • Nome del server in un riferimento a una tabella o vista con nome in quattro parti in un'istruzione Transact-SQL. Le altre tre parti del nome fanno riferimento a un oggetto del server collegato esposto come set di righe.

  • Parametro di input per una funzione OPENQUERY. OPENQUERY invia al provider OLE DB un comando da eseguire. Il set di righe restituito può essere quindi utilizzato come riferimento a una tabella o vista in un'istruzione Transact-SQL.

Per ulteriori informazioni, vedere Identificazione di un'origine dei dati tramite il nome di un server collegato.

Nomi ad hoc

I nomi ad hoc vengono utilizzati per query eseguite raramente su origini dei dati OLE DB non definite come server collegati. In SQL Server le informazioni di connessione per l'accesso ai dati di origini dei dati OLE DB vengono fornite dalle funzioni OPENROWSET e OPENDATASOURCE.

Per impostazione predefinita, i nomi ad hoc non sono supportati. È necessario impostare su 0 l'opzione DisallowAdhocAccess del provider e attivare l'opzione di configurazione avanzata Ad Hoc Distributed Queries.

Nota sulla sicurezzaNota sulla sicurezza

Se si consente l'utilizzo dei nomi ad hoc, tutti gli account di accesso a SQL Server autenticati potranno accedere al provider. Gli amministratori di SQL Server devono attivare questa funzionalità solo per provider altamente attendibili, a cui è possibile accedere in modo sicuro tramite qualsiasi account di accesso locale.

Le funzioni OPENROWSET e OPENDATASOURCE devono essere utilizzate solo per fare riferimento a origini dei dati OLE DB a cui si accede raramente. Per le origini dei dati a cui è necessario accedere di frequente, definire un server collegato. OPENDATASOURCE e OPENROWSET non dispongono di tutte le funzionalità offerte dalle definizioni dei server collegati, che includono la gestione della protezione e la possibilità di eseguire query sulle informazioni del catalogo. Ogni volta che queste funzioni vengono chiamate è necessario specificare tutte le informazioni per la connessione, compresa la password.

OPENROWSET e OPENDATASOURCE vengono chiamate funzioni per praticità, ma in realtà sono macro e non supportano il passaggio di variabili come argomenti alle istruzioni Transact-SQL.

La funzione OPENROWSET può essere utilizzata con qualsiasi provider OLE DB che restituisce un set di righe e in qualsiasi punto di un'istruzione Transact-SQL in cui viene utilizzato un riferimento a una tabella o a una vista. Insieme a OPENROWSET è necessario specificare le informazioni seguenti:

  • Tutte le informazioni necessarie per connettersi all'origine dei dati OLE DB.

  • Il nome di un oggetto che genera un set di righe o una query che genera un set di righe.

La funzione OPENDATASOURCE specifica le informazioni di connessione nell'ambito di un nome di oggetto in quattro parti. Questa funzione supporta solo i provider OLE DB che espongono più set di righe utilizzando la notazione catalog**.schema.**object. La funzione OPENDATASOURCE può essere utilizzata in tutti i punti della sintassi Transact-SQL in cui è possibile utilizzare il nome di un server collegato. Insieme a OPENDATASOURCE è necessario specificare le informazioni seguenti:

  • Il nome registrato come PROGID del provider OLE DB utilizzato per accedere all'origine dei dati.

  • Una stringa di connessione che specifica le varie proprietà di connessione da passare al provider OLE DB. La sintassi della stringa di connessione è costituita da una sequenza di coppie valore-parola chiave. La sintassi di base è definita nel Microsoft Data Access Software Development Kit e per ogni provider sono indicate le specifiche coppie valore-parola chiave supportate. Per ulteriori informazioni sulle stringhe di connessione, vedere OPENDATASOURCE (Transact-SQL).

Per ulteriori informazioni, vedere Identificazione di un'origine dei dati tramite un nome ad hoc.

Accesso ai server collegati

Dopo aver creato un server collegato utilizzando sp_addlinkedserver, è possibile accedervi tramite:

  • Query distribuite che accedono a tabelle nel server collegato, tramite istruzioni SELECT, INSERT, UPDATE e DELETE, utilizzando un nome basato sul server collegato.

  • Stored procedure remote eseguite sul server collegato tramite un nome in quattro parti.

  • Un'istruzione EXECUTE arbitrario che accetta un comando pass-through con parametri utilizzando l'estensione AT linked_server_name. I comandi di questo tipo includono istruzioni DDL (Data Definition Language) e DML (Data Manipulation Language) oppure comandi che restituiscono più di un risultato. Per ulteriori informazioni, vedere Utilizzo di query pass-through come tabelle.

La stored procedure sp_addserver viene mantenuta per compatibilità con le applicazioni esistenti, ma nelle versioni future non sarà più supportata. Quando si esegue la migrazione di applicazioni a SQL Server 2008, per qualche tempo tali applicazioni dovranno essere eseguite sia insieme a codice che utilizza query distribuire su una definizione di server collegato, sia insieme a codice precedente che utilizza una definizione di server remoto. I server collegati e i server remoti utilizzano lo stesso spazio dei nomi. Pertanto la definizione del server collegato o quella del server remoto deve utilizzare un nome diverso dal nome di rete del server a cui si accede in remoto. Definire una delle voci assegnandovi un nome di server diverso e utilizzare sp_setnetname per associare tale definizione al nome di rete del server remoto.