OPENROWSET (Transact-SQL)OPENROWSET (Transact-SQL)

QUESTO argomento si applica a:yesSQL Server (a partire 2008)SìDatabase SQL di Azure (solo gestito istanza)nessunAzure SQL Data Warehouse alcunParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL Database (Managed Instance only)noAzure SQL Data Warehouse noParallel Data Warehouse

Include tutte le informazioni di connessione necessarie per l'accesso remoto ai dati da un'origine dati OLE DB.Includes all connection information that is required to access remote data from an OLE DB data source. Si tratta di un metodo alternativo per l'accesso alle tabelle di un server collegato e corrisponde a un metodo ad hoc eseguito una sola volta per la connessione e l'accesso ai dati remoti tramite OLE DB.This method is an alternative to accessing tables in a linked server and is a one-time, ad hoc method of connecting and accessing remote data by using OLE DB. Per ottenere riferimenti più frequenti alle origini dati OLE DB, utilizzare server collegati.For more frequent references to OLE DB data sources, use linked servers instead. Per altre informazioni, vedere Server collegati (Motore di database).For more information, see Linked Servers (Database Engine). È possibile fare riferimento alla funzione OPENROWSET nella clausola FROM di una query come se fosse un nome di tabella.The OPENROWSET function can be referenced in the FROM clause of a query as if it were a table name. È anche possibile fare riferimento alla funzione OPENROWSET come tabella di destinazione di un'istruzioneINSERT, UPDATE o DELETE, a seconda delle funzionalità del provider OLE DB.The OPENROWSET function can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement, subject to the capabilities of the OLE DB provider. Anche quando la query può restituire più set di risultati, la funzione OPENROWSET restituisce solo il primo set.Although the query might return multiple result sets, OPENROWSET returns only the first one.

OPENROWSET supporta anche le operazioni bulk tramite un provider BULK predefinito che consente di leggere i dati da un file e restituirli come set di righe.OPENROWSET also supports bulk operations through a built-in BULK provider that enables data from a file to be read and returned as a rowset.

Importante

Nel istanza gestita di Azure SQL Database, questa funzionalità di T-SQL presenta alcune modifiche di comportamento.On Azure SQL Database Managed Instance, this T-SQL feature has certain behavior changes. Vedere differenze di Azure SQL Database gestiti istanza T-SQL da SQL Server per i dettagli per tutte le modifiche di comportamento di T-SQL.See Azure SQL Database Managed Instance T-SQL differences from SQL Server for details for all T-SQL behavior changes.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax


OPENROWSET   
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'   
   | 'provider_string' }   
   , {   [ catalog. ] [ schema. ] object   
       | 'query'   
     }   
   | BULK 'data_file' ,   
       { FORMATFILE = 'format_file_path' [ <bulk_options> ]  
       | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }  
} )   

<bulk_options> ::=  
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ , DATASOURCE = 'data_source_name' ]
   [ , ERRORFILE = 'file_name' ]  
   [ , ERRORFILE_DATASOURCE = 'data_source_name' ]   
   [ , FIRSTROW = first_row ]   
   [ , LASTROW = last_row ]   
   [ , MAXERRORS = maximum_errors ]   
   [ , ROWS_PER_BATCH = rows_per_batch ]  
   [ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ] ]

   -- bulk_options related to input file format
   [ , FORMAT = 'CSV' ]
   [ , FIELDQUOTE = 'quote_characters']
   [ , FORMATFILE = 'format_file_path' ]   

ArgomentiArguments

'provider_name''provider_name'
Stringa di caratteri che rappresenta il nome descrittivo (o PROGID) del provider OLE DB specificato nel Registro di sistema.Is a character string that represents the friendly name (or PROGID) of the OLE DB provider as specified in the registry. provider_name non ha un valore predefinito.provider_name has no default value.

'datasource''datasource'
Costante stringa che corrisponde a un'origine dati OLE DB specifica.Is a string constant that corresponds to a particular OLE DB data source. datasource è la proprietà DBPROP_INIT_DATASOURCE da passare all'interfaccia IDBProperties del provider per l'inizializzazione di quest'ultimo.datasource is the DBPROP_INIT_DATASOURCE property to be passed to the IDBProperties interface of the provider to initialize the provider. In genere questa stringa include il nome del file di database, il nome di un server di database o un nome riconosciuto dal provider per individuare il database o i database.Typically, this string includes the name of the database file, the name of a database server, or a name that the provider understands to locate the database or databases.

'user_id''user_id'
Costante stringa che rappresenta il nome utente passato al provider OLE DB specificato.Is a string constant that is the user name passed to the specified OLE DB provider. user_id consente di specificare il contesto di sicurezza per la connessione e viene passato come proprietà DBPROP_AUTH_USERID per l'inizializzazione del provider.user_id specifies the security context for the connection and is passed in as the DBPROP_AUTH_USERID property to initialize the provider. user_id non può essere un ID di accesso di Microsoft Windows.user_id cannot be a Microsoft Windows login name.

'password''password'
Costante stringa che rappresenta la password utente da passare al provider OLE DB.Is a string constant that is the user password to be passed to the OLE DB provider. password viene passato come proprietà DBPROP_AUTH_PASSWORD durante l'inizializzazione del provider.password is passed in as the DBPROP_AUTH_PASSWORD property when initializing the provider. password non può essere una password di Microsoft Windows.password cannot be a Microsoft Windows password.

'provider_string''provider_string'
Stringa di connessione specifica del provider passata come proprietà DBPROP_INIT_PROVIDERSTRING per l'inizializzazione del provider OLE DB.Is a provider-specific connection string that is passed in as the DBPROP_INIT_PROVIDERSTRING property to initialize the OLE DB provider. In provider_string sono incluse in genere tutte le informazioni di connessione necessarie per inizializzare il provider.provider_string typically encapsulates all the connection information required to initialize the provider. Per un elenco di parole chiave riconosciute dal provider OLE DB di SQL ServerSQL Server Native Client, vedere Proprietà di inizializzazione e di autorizzazione.For a list of keywords that are recognized by the SQL ServerSQL Server Native Client OLE DB provider, see Initialization and Authorization Properties.

catalogcatalog
Nome del catalogo o database contenente l'oggetto specificato.Is the name of the catalog or database in which the specified object resides.

schemaschema
Nome dello schema o proprietario dell'oggetto specificato.Is the name of the schema or object owner for the specified object.

objectobject
Nome dell'oggetto che identifica in modo univoco l'oggetto da utilizzare.Is the object name that uniquely identifies the object to work with.

'query''query'
Costante stringa inviata al provider ed eseguita da questo.Is a string constant sent to and executed by the provider. L'istanza locale di SQL ServerSQL Server non elabora questa query, ma i risultati della query restituiti dal provider (query pass-through).The local instance of SQL ServerSQL Server does not process this query, but processes query results returned by the provider, a pass-through query. Le query pass-through risultano utili quando vengono utilizzate in provider che non espongono i dati tabulari tramite i nomi di tabella, ma solo attraverso un linguaggio di comando.Pass-through queries are useful when used on providers that do not make available their tabular data through table names, but only through a command language. Le query pass-through sono supportate nel server remoto, a condizione che il provider di query supporti l'oggetto OLE DB Command e le relative interfacce obbligatorie.Pass-through queries are supported on the remote server, as long as the query provider supports the OLE DB Command object and its mandatory interfaces. Per altre informazioni, vedere Informazioni di riferimento di SQL Server Native Client (OLE DB).For more information, see SQL Server Native Client (OLE DB) Reference.

BULKBULK
Utilizza il provider BULK per set di righe per OPENROWSET per leggere i dati da un file.Uses the BULK rowset provider for OPENROWSET to read data from a file. In SQL ServerSQL Server, OPENROWSET è in grado di leggere da un file di dati senza caricare i dati in una tabella di destinazione.In SQL ServerSQL Server, OPENROWSET can read from a data file without loading the data into a target table. Ciò consente di utilizzare OPENROWSET con un'istruzione SELECT semplice.This lets you use OPENROWSET with a simple SELECT statement.

Gli argomenti dell'opzione BULK consentono un controllo significativo su dove iniziare e terminare la lettura dei dati, come gestire gli errori e come interpretare i dati.The arguments of the BULK option allow for significant control over where to start and end reading data, how to deal with errors, and how data is interpreted. È ad esempio possibile specificare che il file di dati deve essere letto come riga singola, set di righe a colonna singola di tipo varbinary, varchar o nvarchar.For example, you can specify that the data file be read as a single-row, single-column rowset of type varbinary, varchar, or nvarchar. Il comportamento predefinito viene illustrato nelle descrizioni degli argomenti seguenti.The default behavior is described in the argument descriptions that follow.

Per informazioni sull'utilizzo dell'opzione BULK, vedere la sezione "Osservazioni" di seguito in questo argomento.For information about how to use the BULK option, see "Remarks," later in this topic. Per informazioni sulle autorizzazioni necessarie per l'opzione BULK, vedere la sezione "Autorizzazioni" di seguito in questo argomento.For information about the permissions that are required by the BULK option, see "Permissions," later in this topic.

Nota

Quando utilizzata per importare i dati con il modello di recupero con registrazione completa, OPENROWSET (BULK ...) non ottimizza la registrazione.When used to import data with the full recovery model, OPENROWSET (BULK ...) does not optimize logging.

Per informazioni sulla preparazione dei dati per le operazioni di importazione bulk, vedere Preparazione dei dati per l'importazione o l'esportazione bulk (SQL Server).For information on preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

'data_file''data_file'
Percorso completo del file di dati i cui dati devono essere copiati nella tabella di destinazione.Is the full path of the data file whose data is to be copied into the target table.
Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
A partire da SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, data_file può essere presente nell'archiviazione BLOB di Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the data_file can be in Azure blog storage. Per alcuni esempi, vedere Esempi di accesso bulk ai dati nell'archiviazione BLOB di Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

<bulk_options><bulk_options>
Specifica uno o più argomenti per l'opzione BULK.Specifies one or more arguments for the BULK option.

CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }
Specifica la tabella codici dei dati contenuti nel file di dati.Specifies the code page of the data in the data file. CODEPAGE è pertinente solo se i dati contengono colonne di tipo char, varchar o text con valori carattere maggiori di 127 o minori di 32.CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values more than 127 or less than 32.

Importante

CODEPAGE non è un'opzione supportata in Linux.CODEPAGE is not a supported option on Linux.

Nota

È consigliabile specificare un nome di regole di confronto per ogni colonna in un file di formato tranne quando si vuole assegnare all'opzione 65001 la priorità sulla specifica delle regole di confronto o della tabella codici.We recommend that you specify a collation name for each column in a format file, except when you want the 65001 option to have priority over the collation/code page specification.

Valore CODEPAGECODEPAGE value DescriptionDescription
ACPACP Converte le colonne con tipo di dati char, varchar o text dalla tabella codici ANSI/ MicrosoftMicrosoft Windows (ISO 1252) a quella di SQL ServerSQL Server.Converts columns of char, varchar, or text data type from the ANSI/ MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (predefinito)OEM (default) Converte le colonne con tipo di dati char, varchar o text dalla tabella codici OEM di sistema a quella di SQL ServerSQL Server.Converts columns of char, varchar, or text data type from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW Non vengono eseguite conversioni tra tabelle codici.No conversion occurs from one code page to another. Si tratta dell'opzione più rapida.This is the fastest option.
code_pagecode_page Indica la tabella codici di origine in cui vengono codificati i dati di tipo carattere del file di dati, ad esempio 850.Indicates the source code page on which the character data in the data file is encoded; for example, 850.

** Importante *\* Le versioni precedenti a SQL Server 2016 (13.x)SQL Server 2016 (13.x) non supportano la tabella codici 65001 (codifica UTF-8).** Important *\* Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) do not support code page 65001 (UTF-8 encoding).

ERRORFILE ='file_name'ERRORFILE ='file_name'
Specifica il file utilizzato per raccogliere le righe che contengono errori di formattazione e non possono essere convertite in un set di righe OLE DB.Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Tali righe vengono copiate nel file degli errori dal file di dati così come sono.These rows are copied into this error file from the data file "as is."

Il file di errori viene creato all'inizio dell'esecuzione del comando.The error file is created at the start of the command execution. Se il file esiste già viene generato un errore.An error will be raised if the file already exists. Viene inoltre creato un file di controllo con estensione ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. Questo file contiene un riferimento a ogni riga nel file degli errori e fornisce informazioni di diagnostica.This file references each row in the error file and provides error diagnostics. Dopo la correzione degli errori, i dati possono essere caricati.After the errors have been corrected, the data can be loaded.
Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. A partire da SQL Server 2017 (14.x)SQL Server 2017 (14.x), error_file_path può essere presente nell'archiviazione BLOB di Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blog storage.

'errorfile_data_source_name''errorfile_data_source_name'
Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Origine dati esterna denominata che punta alla posizione di archiviazione BLOB di Azure del file degli errori rilevati durante l'importazione.Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. L'origine dati esterna deve essere creata tramite l'opzione TYPE = BLOB_STORAGE aggiunta in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Per altre informazioni, vedere CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW =first_rowFIRSTROW =first_row
Specifica il numero della prima riga da caricare.Specifies the number of the first row to load. Il valore predefinito è 1.The default is 1. Questo valore indica la prima riga nel file di dati specificato.This indicates the first row in the specified data file. I numeri di riga sono determinati dal conteggio dei caratteri di terminazione.The row numbers are determined by counting the row terminators. FIRSTROW è in base 1.FIRSTROW is 1-based.

LASTROW =last_rowLASTROW =last_row
Specifica il numero dell'ultima riga da caricare.Specifies the number of the last row to load. Il valore predefinito è 0.The default is 0. Questo valore indica l'ultima riga nel file di dati specificato.This indicates the last row in the specified data file.

MAXERRORS =maximum_errorsMAXERRORS =maximum_errors
Specifica il numero massimo di errori di sintassi o righe non conformi, definite nel file di formato, che possono verificarsi prima che OPENROWSET generi un'eccezione.Specifies the maximum number of syntax errors or nonconforming rows, as defined in the format file, that can occur before OPENROWSET throws an exception. Fino al raggiungimento di MAXERRORS, OPENROWSET ignora ogni riga non conforme, non caricandola, e conteggia la riga non conforme come un errore.Until MAXERRORS is reached, OPENROWSET ignores each bad row, not loading it, and counts the bad row as one error.

Il valore predefinito per maximum_errors è 10.The default for maximum_errors is 10.

Nota

MAX_ERRORS non si applica ai vincoli CHECK o alla conversione dei tipi di dati money e bigint.MAX_ERRORS does not apply to CHECK constraints, or to converting money and bigint data types.

ROWS_PER_BATCH =rows_per_batchROWS_PER_BATCH =rows_per_batch
Specifica il numero approssimativo di righe di dati nel file di dati.Specifies the approximate number of rows of data in the data file. Questo valore deve essere dello stesso ordine del numero effettivo di righe.This value should be of the same order as the actual number of rows.

OPENROWSET importa sempre un file di dati come batch singolo.OPENROWSET always imports a data file as a single batch. Se tuttavia si specifica rows_per_batch con un valore > 0, Query Processor usa il valore di rows_per_batch come hint per l'allocazione delle risorse nel piano di query.However, if you specify rows_per_batch with a value > 0, the query processor uses the value of rows_per_batch as a hint for allocating resources in the query plan.

Per impostazione predefinita, il valore ROWS_PER_BATCH è sconosciuto.By default, ROWS_PER_BATCH is unknown. La specifica di ROWS_PER_BATCH = 0 equivale all'omissione di ROWS_PER_BATCH.Specifying ROWS_PER_BATCH = 0 is the same as omitting ROWS_PER_BATCH.

ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )
Hint facoltativo che specifica il modo in cui vengono ordinati i dati nel file di dati.An optional hint that specifies how the data in the data file is sorted. Per impostazione predefinita, per l'operazione bulk si presume che il file di dati non sia ordinato.By default, the bulk operation assumes the data file is unordered. Se l'ordine specificato può essere sfruttato da Query Optimizer per generare un piano di query più efficiente, le prestazioni possono migliorare.Performance might improve if the order specified can be exploited by the query optimizer to generate a more efficient query plan. Di seguito vengono riportati alcuni esempi di situazioni in cui può essere utile specificare l'ordinamento:Examples for when specifying a sort can be beneficial include the following:

  • Inserimento di righe in una tabella con un indice cluster, in cui i dati del set di righe sono ordinati in base alla chiave dell'indice cluster.Inserting rows into a table that has a clustered index, where the rowset data is sorted on the clustered index key.

  • Unione del set di righe con un'altra tabella, in cui le colonne di ordinamento e di join corrispondono.Joining the rowset with another table, where the sort and join columns match.

  • Aggregazione dei dati del set di righe tramite le colonne dell'ordinamento.Aggregating the rowset data by the sort columns.

  • Utilizzo del set di righe come tabella di origine nella clausola FROM di una query, in cui le colonne di ordinamento e di join corrispondono.Using the rowset as a source table in the FROM clause of a query, where the sort and join columns match.

    UNIQUE specifica che il file di dati non ha voci duplicate.UNIQUE specifies that the data file does not have duplicate entries.

    Se le righe effettive del file di dati non sono ordinate in base all'ordine specificato o se l'hint UNIQUE viene specificato e sono presenti chiavi duplicate, viene restituito un errore.If the actual rows in the data file are not sorted according to the order that is specified, or if the UNIQUE hint is specified and duplicates keys are present, an error is returned.

    Gli alias di colonna sono richiesti quando si utilizza ORDER.Column aliases are required when ORDER is used. L'elenco di alias di colonna deve fare riferimento alla tabella derivata a cui è possibile accedere tramite la clausola BULK.The column alias list must reference the derived table that is being accessed by the BULK clause. I nomi di colonna specificati nella clausola ORDER si riferiscono a questo elenco di alias di colonna.The column names that are specified in the ORDER clause refer to this column alias list. Non è possibile specificare colonne di tipi valore di grandi dimensioni (varchar(max), nvarchar(max), varbinary(max) e xml) e di tipi Large Object (LOB) (text, ntext e image).Large value types (varchar(max), nvarchar(max), varbinary(max), and xml) and large object (LOB) types (text, ntext, and image) columns cannot be specified.

    SINGLE_BLOBSINGLE_BLOB
    Restituisce il contenuto di data_file come set di righe a riga singola e a colonna singola di tipo varbinary(max).Returns the contents of data_file as a single-row, single-column rowset of type varbinary(max).

Importante

Per l'importazione di dati XML è consigliabile utilizzare solo l'opzione SINGLE_BLOB anziché SINGLE_CLOB e SINGLE_NCLOB, in quanto solo SINGLE_BLOB supporta tutti i tipi di conversione di codifica di Windows.We recommend that you import XML data only using the SINGLE_BLOB option, rather than SINGLE_CLOB and SINGLE_NCLOB, because only SINGLE_BLOB supports all Windows encoding conversions.

SINGLE_CLOBSINGLE_CLOB
Leggendo data_file come ASCII, restituisce il contenuto come set di righe a riga singola e colonna singola di tipo varchar(max), usando le regole di confronto del database corrente.By reading data_file as ASCII, returns the contents as a single-row, single-column rowset of type varchar(max), using the collation of the current database.

SINGLE_NCLOBSINGLE_NCLOB
Leggendo data_file come UNICODE, restituisce il contenuto come set di righe a riga singola e colonna singola di tipo varchar(max), usando le regole di confronto del database corrente.By reading data_file as UNICODE, returns the contents as a single-row, single-column rowset of type nvarchar(max), using the collation of the current database.

Opzioni di formato del file di inputInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Specifica un file di valori separati da virgole conforme allo standard RFC 4180.Specifies a comma separated values file compliant to the RFC 4180 standard.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
Specifica il percorso completo di un file di formato.Specifies the full path of a format file. SQL ServerSQL Server supporta due tipi di file di formato, ovvero XML e non XML. supports two types of format files: XML and non-XML.

Un file di formato è necessario per definire i tipi di colonna nel set di risultati.A format file is required to define column types in the result set. L'unica eccezione si verifica quando viene specificato SINGLE_CLOB, SINGLE_BLOB o SINGLE_NCLOB. In questo caso, il file di formato non è necessario.The only exception is when SINGLE_CLOB, SINGLE_BLOB, or SINGLE_NCLOB is specified; in which case, the format file is not required.

Per informazioni sui file di formato, vedere Usare un file di formato per l'importazione bulk dei dati (SQL Server).For information about format files, see Use a Format File to Bulk Import Data (SQL Server).

Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
A partire da SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, format_file_path può essere presente nell'archiviazione BLOB di Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blog storage. Per alcuni esempi, vedere Esempi di accesso bulk ai dati nell'archiviazione BLOB di Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Specifica il carattere da usare come carattere virgolette nel file CSV.Specifies a character that will be used as the quote character in the CSV file. Se non viene specificato alcun carattere, viene usato il carattere virgolette (") in base alla definizione dello standard RFC 4180.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

RemarksRemarks

È possibile usare OPENROWSET per accedere ai dati remoti da origini dati OLE DB solo se l'opzione del Registro di sistema DisallowAdhocAccess è impostata esplicitamente su 0 per il provider specificato e l'opzione di configurazione avanzata Ad Hoc Distributed Queries è abilitata.OPENROWSET can be used to access remote data from OLE DB data sources only when the DisallowAdhocAccess registry option is explicitly set to 0 for the specified provider, and the Ad Hoc Distributed Queries advanced configuration option is enabled. Quando queste opzioni non vengono impostate, il comportamento predefinito non consente l'accesso ad hoc.When these options are not set, the default behavior does not allow for ad hoc access.

Quando si accede alle origini dati OLE DB remote, l'identità dell'account di accesso delle connessioni trusted non viene delegata automaticamente dal server in cui il client è connesso al server su cui viene eseguita la query.When accessing remote OLE DB data sources, the login identity of trusted connections is not automatically delegated from the server on which the client is connected to the server that is being queried. È necessario configurare la delega dell'autenticazione.Authentication delegation must be configured.

Se il provider OLE DB supporta più cataloghi e schemi nell'origine dati specificata, è necessario specificare i nomi di catalogo e di schema.Catalog and schema names are required if the OLE DB provider supports multiple catalogs and schemas in the specified data source. I valori per catalog e schema possono essere omessi se il provider OLE DB non li supporta.Values for catalog and schema can be omitted when the OLE DB provider does not support them. Se il provider supporta solo nomi di schema, è necessario specificare un nome composto da due parti nel formato schema ***.** oggetto.If the provider supports only schema names, a two-part name of the form *schema ***.** object* must be specified. Se il provider supporta solo nomi di catalogo, è necessario specificare un nome composto da tre parti nel formato catalogo ***.** schema . oggetto.If the provider supports only catalog names, a three-part name of the form *catalog ***.** schema . object* must be specified. È necessario specificare nomi composti da tre parti per le query pass-through che usano il provider OLE DB di SQL ServerSQL Server Native Client.Three-part names must be specified for pass-through queries that use the SQL ServerSQL Server Native Client OLE DB provider. Per altre informazioni, vedere Convenzioni della sintassi Transact-SQL (Transact-SQL).For more information, see Transact-SQL Syntax Conventions (Transact-SQL).

La funzione OPENROWSET non accetta variabili come argomenti.OPENROWSET does not accept variables for its arguments.

Qualsiasi chiamata a OPENDATASOURCE, OPENQUERY r OPENROWSET nella clausola FROM viene valutata separatamente e indipendentemente da qualsiasi altra chiamata a queste funzioni usate come destinazione dell'aggiornamento, anche se alle due chiamate vengono forniti argomenti identici.Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. In particolare, le condizioni di filtro o join applicate al risultato di una di tali chiamate non hanno effetto sui risultati dell'altra.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

Utilizzo di OPENROWSET con l'opzione BULKUsing OPENROWSET with the BULK Option

I miglioramenti seguenti apportati a Transact-SQLTransact-SQL offrono il supporto per la funzione OPENROWSET(BULK…):The following Transact-SQLTransact-SQL enhancements support the OPENROWSET(BULK...) function:

  • Una clausola FROM usata con SELECT può chiamare OPENROWSET(BULK...) anziché un nome di tabella. In questo modo, sono disponibili tutte le funzionalità dell'istruzione SELECT.A FROM clause that is used with SELECT can call OPENROWSET(BULK...) instead of a table name, with full SELECT functionality.

    OPENROWSET con l'opzione BULK richiede un nome di correlazione, noto anche come alias o variabile di intervallo, nella clausola FROM.OPENROWSET with the BULK option requires a correlation name, also known as a range variable or alias, in the FROM clause. È possibile specificare alias di colonne.Column aliases can be specified. Se non è specificato un elenco di alias di colonna, il file di formato deve contenere nomi di colonna.If a column alias list is not specified, the format file must have column names. Se si specificano gli alias di colonna, i nomi di colonna nel file di formato vengono sostituiti, ad esempio:Specifying column aliases overrides the column names in the format file, such as:

    FROM OPENROWSET(BULK...) AS table_alias

    FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)

    Importante

    Se non si aggiunge AS <table_alias> viene generato l'errore:Failure to add the AS <table_alias> will result in the error:
    Messaggio 491, livello 16, stato 1, riga 20Msg 491, Level 16, State 1, Line 20
    Specificare il nome della correlazione per il set di righe con lettura bulk nella clausola FROM.A correlation name must be specified for the bulk rowset in the from clause.

  • Un'istruzione SELECT...FROM OPENROWSET(BULK...) consente di eseguire query direttamente sui dati in un file, senza importare i dati in una tabella.A SELECT...FROM OPENROWSET(BULK...) statement queries the data in a file directly, without importing the data into a table. Le istruzioni SELECT…FROM OPENROWSET(BULK...) consentono anche di elencare alias di colonna bulk usando un file di formato per specificare nomi di colonna e tipi di dati.SELECT…FROM OPENROWSET(BULK...) statements can also list bulk-column aliases by using a format file to specify column names, and also data types.

  • L'uso di OPENROWSET(BULK...) come tabella di origine in un'istruzione INSERT o MERGE consente di eseguire l'importazione bulk di dati da un file di dati in una tabella di SQL ServerSQL Server.Using OPENROWSET(BULK...) as a source table in an INSERT or MERGE statement bulk imports data from a data file into a SQL ServerSQL Server table. Per altre informazioni, vedere Importazione di dati per operazioni bulk con BULK INSERT o OPENROWSET(BULK...) (SQL Server).For more information, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server) .

  • Quando l'opzione OPENROWSET BULK viene usata con un'istruzione INSERT, la clausola BULK supporta gli hint di tabella.When the OPENROWSET BULK option is used with an INSERT statement, the BULK clause supports table hints. Oltre agli hint di tabella normali, ad esempio TABLOCK, la clausola BULK può accettare gli hint di tabella specializzati seguenti: IGNORE_CONSTRAINTS (ignora solo i vincoli CHECK e FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTS e KEEPIDENTITY.In addition to the regular table hints, such as TABLOCK, the BULK clause can accept the following specialized table hints: IGNORE_CONSTRAINTS (ignores only the CHECK and FOREIGN KEY constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. Per altre informazioni, vedere Hint di tabella (Transact-SQL).For more information, see Table Hints (Transact-SQL).

    Per informazioni su come usare le istruzioni INSERT...SELECT * FROM OPENROWSET(BULK...), vedere Importazione ed esportazione bulk di dati (SQL Server).For information about how to use INSERT...SELECT * FROM OPENROWSET(BULK...) statements, see Bulk Import and Export of Data (SQL Server). Per informazioni sui casi in cui le operazioni di inserimento di righe eseguite durante l'importazione in blocco vengono registrate nel log delle transazioni, vedere Prerequisiti per la registrazione minima nell'importazione in blocco.For information about when row-insert operations that are performed by bulk import are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import.

Nota

Quando si usa OPENROWSET, è importante comprendere il modo in cui la rappresentazione viene gestita da SQL ServerSQL Server.When you use OPENROWSET, it is important to understand how SQL ServerSQL Server handles impersonation. Per considerazioni sulla sicurezza, vedere Importazione di dati per operazioni bulk con BULK INSERT o OPENROWSET(BULK...) (SQL Server).For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

Importazione bulk di dati SQLCHAR, SQLNCHAR o SQLBINARYBulk Importing SQLCHAR, SQLNCHAR or SQLBINARY Data

OPENROWSET(BULK...) presuppone che, se non è specificata, la lunghezza massima dei dati SQLCHAR, SQLNCHAR o SQLBINARY non supera 8000 byte.OPENROWSET(BULK...) assumes that, if not specified, the maximum length of SQLCHAR, SQLNCHAR or SQLBINARY data does not exceed 8000 bytes. Se i dati in corso di importazione sono in un campo dati di tipo LOB contenente un oggetto varchar(max), nvarchar(max) o varbinary(max) che supera 8000 byte, è necessario usare un file di formato XML che definisca la lunghezza massima per il campo dati.If the data being imported is in a LOB data field that contains any varchar(max), nvarchar(max), or varbinary(max) objects that exceed 8000 bytes, you must use an XML format file that defines the maximum length for the data field. Per specificare la lunghezza massima, modificare il file di formato dichiarando l'attributo MAX_LENGTH.To specify the maximum length, edit the format file and declare the MAX_LENGTH attribute.

Nota

Un file di formato generato automaticamente non specifica la lunghezza o la lunghezza massima per un campo di tipo LOB.An automatically generated format file does not specify the length or maximum length for a LOB field. Tuttavia, è possibile modificare un file di formato e specificare la lunghezza o la lunghezza massima manualmente.However, you can edit a format file and specify the length or maximum length manually.

Esportazione o importazione bulk di documenti SQLXMLBulk Exporting or Importing SQLXML Documents

Per l'esportazione o l'importazione bulk di dati SQLXML, utilizzare uno dei tipi di dati seguenti nel file di formato.To bulk export or import SQLXML data, use one of the following data types in your format file.

Tipo di datiData type EffettoEffect
SQLCHAR o SQLVARYCHARSQLCHAR or SQLVARYCHAR I dati vengono inviati nella tabella codici del client o nella tabella codici implicita delle regole di confronto.The data is sent in the client code page or in the code page implied by the collation).
SQLNCHAR o SQLNVARCHARSQLNCHAR or SQLNVARCHAR I dati vengono inviati in formato Unicode.The data is sent as Unicode.
SQLBINARY o SQLVARYBINSQLBINARY or SQLVARYBIN I dati vengono inviati senza conversione.The data is sent without any conversion.

AutorizzazioniPermissions

Le autorizzazioni OPENROWSET sono determinate dalle autorizzazioni del nome utente che viene passato al provider OLE DB.OPENROWSET permissions are determined by the permissions of the user name that is being passed to the OLE DB provider. L'uso dell'opzione BULK richiede l'autorizzazione ADMINISTER BULK OPERATIONS.To use the BULK option requires ADMINISTER BULK OPERATIONS permission.

EsempiExamples

A.A. Utilizzo di OPENROWSET con SELECT e il provider OLE DB di SQL Server Native ClientUsing OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider

L'esempio seguente usa il provider OLE DB di SQL ServerSQL Server Native Client per accedere alla tabella HumanResources.Department del database AdventureWorks2012AdventureWorks2012 nel server remoto Seattle1.The following example uses the SQL ServerSQL Server Native Client OLE DB provider to access the HumanResources.Department table in the AdventureWorks2012AdventureWorks2012 database on the remote server Seattle1. (L'utilizzo di SQLNCLI e SQL ServerSQL Server reindirizza alla versione più recente del provider OLE DB per SQL ServerSQL Server Native Client.) Viene utilizzata un'istruzione SELECT per definire il set di righe restituito.(Use SQLNCLI and SQL ServerSQL Server will redirect to the latest version of SQL ServerSQL Server Native Client OLE DB Provider.) A SELECT statement is used to define the row set returned. La stringa del provider contiene le parole chiave Server e Trusted_Connection.The provider string contains the Server and Trusted_Connection keywords. Queste parole chiave sono riconosciute dal provider OLE DB di SQL ServerSQL Server Native Client.These keywords are recognized by the SQL ServerSQL Server Native Client OLE DB provider.

SELECT a.*  
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',  
     'SELECT GroupName, Name, DepartmentID  
      FROM AdventureWorks2012.HumanResources.Department  
      ORDER BY GroupName, Name') AS a;  

B.B. Utilizzo del provider Microsoft OLE DB per JetUsing the Microsoft OLE DB Provider for Jet

Nell'esempio seguente viene ottenuto l'accesso alla tabella Customers del database Northwind di MicrosoftMicrosoft Access tramite il provider MicrosoftMicrosoft OLE DB per Jet.The following example accesses the Customers table in the MicrosoftMicrosoft Access Northwind database through the MicrosoftMicrosoft OLE DB Provider for Jet.

Nota

Nell'esempio si presuppone che Access sia installato.This example assumes that Access is installed. Per eseguire questo esempio, è necessario installare il database Northwind.To run this example, you must install the Northwind database.

SELECT CustomerID, CompanyName  
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
      'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';  
      'admin';'',Customers);  
GO  

C.C. Utilizzo di OPENROWSET e di un'altra tabella in un INNER JOINUsing OPENROWSET and another table in an INNER JOIN

L'esempio seguente seleziona tutti i dati della tabella Customers dell'istanza locale del database SQL ServerSQL Server Northwind e della tabella Orders del database Northwind di Access archiviato nello stesso computer.The following example selects all data from the Customers table from the local instance of SQL ServerSQL Server Northwind database and from the Orders table from the Access Northwind database stored on the same computer.

Nota

Nell'esempio si presuppone che Access sia installato.This example assumes that Access is installed. Per eseguire questo esempio, è necessario installare il database Northwind.To run this example, you must install the Northwind database.

USE Northwind  ;  
GO  
SELECT c.*, o.*  
FROM Northwind.dbo.Customers AS c   
   INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',   
   'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'', Orders)      
   AS o   
   ON c.CustomerID = o.CustomerID ;  
GO  

D.D. Utilizzo di OPENROWSET per eseguire un inserimento bulk dei dati del file in una colonna varbinary(max).Using OPENROWSET to bulk insert file data into a varbinary(max) column

Nell'esempio seguente viene creata una tabella di piccole dimensioni a titolo dimostrativo e vengono quindi inseriti i dati di un file denominato Text1.txt archiviato nella directory radice C: in una colonna varbinary(max).The following example creates a small table for demonstration purposes, and inserts file data from a file named Text1.txt located in the C: root directory into a varbinary(max) column.

USE AdventureWorks2012;  
GO  
CREATE TABLE myTable(FileName nvarchar(60),   
  FileType nvarchar(60), Document varbinary(max));  
GO  

INSERT INTO myTable(FileName, FileType, Document)   
   SELECT 'Text1.txt' AS FileName,   
      '.txt' AS FileType,   
      * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;  
GO  

E.E. Utilizzo del provider OPENROWSET BULK con un file di formato per recuperare le righe da un file di testoUsing the OPENROWSET BULK provider with a format file to retrieve rows from a text file

Nell'esempio seguente viene utilizzato un file di formato per recuperare le righe da un file di testo delimitato da tabulazioni, values.txt contenente i dati seguenti:The following example uses a format file to retrieve rows from a tab-delimited text file, values.txt that contains the following data:

1     Data Item 1  
2     Data Item 2  
3     Data Item 3  

Il file di formato, values.fmt, descrive le colonne in values.txt:The format file, values.fmt, describes the columns in values.txt:

9.0  
2  
1  SQLCHAR  0  10 "\t"        1  ID                SQL_Latin1_General_Cp437_BIN  
2  SQLCHAR  0  40 "\r\n"      2  Description        SQL_Latin1_General_Cp437_BIN  

Di seguito è illustrata la query che recupera tali dati:This is the query that retrieves that data:

SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',   
   FORMATFILE = 'c:\test\values.fmt') AS a;  

F.F. Indicazione di un file di formato e di una tabella codiciSpecifying a format file and code page

L'esempio seguente illustra come usare sia il file di formato che la tabella codici contemporaneamente.The following example show how to use both the format file and code page options at the same time.

INSERT INTO MyTable SELECT a.* FROM  
OPENROWSET (BULK N'D:\data.csv', FORMATFILE =   
    'D:\format_no_collation.txt', CODEPAGE = '65001') AS a;  

G.G. Accesso ai dati da un file CSV con un file di formatoAccessing data from a CSV file with a format file

Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt', 
    FIRSTROW=2, 
    FORMAT='CSV') AS cars;  

H.H. Accesso ai dati da un file CSV senza un file di formatoAccessing data from a CSV file without a format file

SELECT * FROM OPENROWSET(
   BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB) AS DATA;

I.I. Accesso ai dati da un file archiviato nell'archiviazione BLOB di AzureAccessing data from a file stored on Azure Blob storage

Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
L'esempio seguente usa un'origine dati esterna che punta a un contenitore in un account di archiviazione di Azure e credenziali con ambito database create per una firma di accesso condiviso.The following example uses an external data source that points to a container in an Azure storage account and a database scoped credential created for a shared access signature.

SELECT * FROM OPENROWSET(
   BULK  'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   SINGLE_CLOB) AS DataFile;

Per esempi di OPENROWSET completi che includono la configurazione di credenziali e di un'origine dati esterna, vedere Esempi di accesso bulk ai dati nell'archiviazione BLOB di Azure.For complete OPENROWSET examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Esempi aggiuntiviAdditional Examples

Per esempi aggiuntivi relativi all'uso di INSERT...SELECT * FROM OPENROWSET(BULK...), vedere gli argomenti seguenti:For additional examples that show using INSERT...SELECT * FROM OPENROWSET(BULK...), see the following topics:

Vedere ancheSee Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
Informazioni sull'importazione ed esportazione bulk di dati (SQL Server) Bulk Import and Export of Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
OPENQUERY (Transact-SQL) OPENQUERY (Transact-SQL)
Funzioni per i set di righe (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)