Condividi tramite


Utilizzo di query pass-through come tabelle

In SQL Server le query pass-through vengono inviate a un'origine dei dati OLE DB come stringhe di query non interpretate. Le query devono essere formulate con una sintassi supportata dall'origine dei dati OLE DB. Un'istruzione Transact-SQL utilizza i risultati di una query pass-through come se si trattasse di un normale riferimento a una tabella.

Per generare un set di righe da un provider OLE DB è possibile procedere in due modi:

  • Fare riferimento a un oggetto dell'origine dei dati che il provider possa esporre come set di righe in formato di tabella. Questa caratteristica è supportata da tutti i provider.

  • Inviare al provider un comando di cui il provider stesso possa elaborare ed esporre i risultati come set di righe. Questa caratteristica richiede che il provider supporti l'oggetto OLE DB Command e le relative interfacce obbligatorie.

Se un provider supporta l'oggetto Command, per inviare comandi al provider è possibile utilizzare le funzioni Transact-SQL seguenti, denominate query pass-through:

  • Funzione OPENQUERY, che consente di inviare una stringa di comando a un'origine dei dati OLE DB specificando il nome di un server collegato.

  • Funzione OPENROWSET e funzione OPENDATASOURCE, che supportano l'invio di una stringa di comando a un'origine dei dati OLE DB. Per fare riferimento al set di righe risultante è possibile specificare un nome ad hoc.

OPENROWSET e OPENQUERY supportano le query pass-through nelle quali la stringa di query contiene la chiamata a una stored procedure solo se la query ha una delle caratteristiche seguenti:

  • Esegue un'unica istruzione SELECT statica.

  • Non utilizza istruzioni EXECUTE dinamiche.

  • Non esegue operazioni di modifica dei dati.

La specifica OLE DB non definisce un unico linguaggio di comando da utilizzare per tutti i provider OLE DB. I provider OLE DB possono supportare qualsiasi linguaggio di comando correlato ai dati esposti. In generale i provider OLE DB che espongono i dati in database relazionali supportano il linguaggio SQL. Gli altri tipi di provider, ad esempio quelli che espongono i dati in un file di posta elettronica o in una directory di rete, in genere supportano un linguaggio diverso.