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

S’APPLIQUE À : ouiSQL Server (à partir de 2008) ouiAzure SQL Database (Managed Instance uniquement) nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

Inclut toutes les informations de connexion exigées pour accéder à des données distantes à partir d'une source de données OLE DB.Includes all connection information that is required to access remote data from an OLE DB data source. Cette méthode est une autre façon d'accéder à des tables dans un serveur lié et constitue une méthode efficace pour vous connecter et accéder à des données distantes en utilisant 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. Pour faire des références plus fréquentes à des sources de données OLE DB, utilisez plutôt des serveurs liés.For more frequent references to OLE DB data sources, use linked servers instead. Pour plus d’informations, consultez Serveurs liés (moteur de base de données).For more information, see Linked Servers (Database Engine). Il est possible de référencer la fonction OPENROWSET dans la clause FROM d’une requête comme s’il s’agissait du nom d’une table.The OPENROWSET function can be referenced in the FROM clause of a query as if it were a table name. La fonction OPENROWSET peut également être référencée comme table cible d’une instruction INSERT, UPDATE ou DELETE, en fonction des capacités du fournisseur 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. Bien que la requête puisse retourner plusieurs jeux de résultats, OPENROWSET ne retourne que le premier.Although the query might return multiple result sets, OPENROWSET returns only the first one.

OPENROWSET prend également en charge les opérations de chargement en masse par l’intermédiaire d’un fournisseur BULK intégré qui permet de lire les données d’un fichier et de les retourner comme un ensemble de lignes.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.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

  
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' ]   

ArgumentsArguments

'provider_name''provider_name'
Chaîne de caractères représentant le nom convivial (ou PROGID) du fournisseur OLE DB tel que spécifié dans le Registre.Is a character string that represents the friendly name (or PROGID) of the OLE DB provider as specified in the registry. provider_name n’a aucune valeur par défaut.provider_name has no default value.

'datasource''datasource'
Constante de chaîne correspondant à une source de données OLE DB spécifique.Is a string constant that corresponds to a particular OLE DB data source. datasource est la propriété DBPROP_INIT_DATASOURCE à transmettre à l’interface IDBProperties du fournisseur pour initialiser ce dernier.datasource is the DBPROP_INIT_DATASOURCE property to be passed to the IDBProperties interface of the provider to initialize the provider. En général, cette chaîne comporte le nom du fichier de base de données, le nom d'un serveur de base de données ou un nom que comprend le fournisseur pour retrouver la ou les bases de données.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'
Constante de chaîne représentant le nom d'utilisateur passé au fournisseur OLE DB spécifié.Is a string constant that is the user name passed to the specified OLE DB provider. user_id spécifie le contexte de sécurité de la connexion et est transmis en tant que propriété DBPROP_AUTH_USERID pour initialiser le fournisseur.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 ne peut pas être un ID de connexion Microsoft Windows.user_id cannot be a Microsoft Windows login name.

'password''password'
Constante de chaîne représentant le mot de passe utilisateur à transmettre au fournisseur OLE DB.Is a string constant that is the user password to be passed to the OLE DB provider. password est transmis en tant que propriété DBPROP_AUTH_PASSWORD au moment de l’initialisation du fournisseur.password is passed in as the DBPROP_AUTH_PASSWORD property when initializing the provider. password ne peut pas être un mot de passe Microsoft Windows.password cannot be a Microsoft Windows password.

'provider_string''provider_string'
Chaîne de connexion spécifique au fournisseur qui est passée en tant que propriété DBPROP_INIT_PROVIDERSTRING pour initialiser le fournisseur OLE DB.Is a provider-specific connection string that is passed in as the DBPROP_INIT_PROVIDERSTRING property to initialize the OLE DB provider. En général, provider_string encapsule toutes les informations de connexion nécessaires à l’initialisation du fournisseur.provider_string typically encapsulates all the connection information required to initialize the provider. Pour obtenir la liste des mots clés reconnus par le fournisseur SQL ServerSQL Server Native Client OLE DB, consultez Propriétés d’initialisation et d’autorisation.For a list of keywords that are recognized by the SQL ServerSQL Server Native Client OLE DB provider, see Initialization and Authorization Properties.

catalogcatalog
Nom du catalogue ou de la base de données où réside l'objet spécifié.Is the name of the catalog or database in which the specified object resides.

schemaschema
Nom du propriétaire du schéma ou de l'objet pour l'objet spécifié.Is the name of the schema or object owner for the specified object.

objectobject
Nom d'objet qui identifie de façon unique l'objet à manipuler.Is the object name that uniquely identifies the object to work with.

'query''query'
Constante de chaîne envoyée au fournisseur en vue de son exécution.Is a string constant sent to and executed by the provider. L'instance locale SQL ServerSQL Server ne traite pas cette requête, mais traite les résultats de la requête retournés par le fournisseur (requête directe).The local instance of SQL ServerSQL Server does not process this query, but processes query results returned by the provider, a pass-through query. Les requêtes directes sont utiles lorsque les fournisseurs mettent leurs données tabulaires à disposition non pas par l'intermédiaire de noms de tables, mais uniquement au moyen d'un langage de commande.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. Les requêtes directes sont prises en charge sur le serveur distant à condition que le fournisseur de requêtes prenne en charge l’objet OLE DB Command et ses interfaces obligatoires.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. Pour plus d’informations, consultez Informations de référence sur SQL Server Native Client (OLE DB).For more information, see SQL Server Native Client (OLE DB) Reference.

BULKBULK
Utilise le fournisseur d'ensembles de lignes BULK pour que OPENROWSET lise les données dans un fichier.Uses the BULK rowset provider for OPENROWSET to read data from a file. Dans SQL ServerSQL Server, OPENROWSET peut lire un fichier de données sans charger les données dans une table cible.In SQL ServerSQL Server, OPENROWSET can read from a data file without loading the data into a target table. Cela permet d’utiliser OPENROWSET avec une instruction SELECT simple.This lets you use OPENROWSET with a simple SELECT statement.

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

Les arguments de l'option BULK permettent un contrôle significatif sur le début et la fin de la lecture des données, sur le traitement des erreurs et sur l'interprétation des données.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. Vous pouvez par exemple spécifier que le fichier de données soit lu comme un ensemble d’une seule ligne et deune seule colonne du type varbinary, varchar ou 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. Le comportement par défaut est indiqué dans les descriptions des arguments ci-dessous.The default behavior is described in the argument descriptions that follow.

Pour plus d'informations sur l'utilisation de l'option BULK, consultez la section « Remarques » plus loin dans cette rubrique.For information about how to use the BULK option, see "Remarks," later in this topic. Pour plus d'informations sur les autorisations requises par l'option BULK, consultez la section « Autorisations » plus loin dans cette rubrique.For information about the permissions that are required by the BULK option, see "Permissions," later in this topic.

Notes

Lorsqu'elle est utilisée pour importer des données avec le mode de récupération complète, la fonction OPENROWSET (BULK ...) n'optimise pas la journalisation.When used to import data with the full recovery model, OPENROWSET (BULK ...) does not optimize logging.

Pour plus d’informations sur la préparation des données en vue d’une importation en bloc, consultez Préparer des données en vue d’une exportation ou d’une importation en bloc (SQL Server).For information on preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

'data_file''data_file'
Chemin d'accès complet au fichier dont les données doivent être copiées dans la table cible.Is the full path of the data file whose data is to be copied into the target table.
S’applique à : 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.
À partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, data_file peut se trouver dans le Stockage Blob Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the data_file can be in Azure blob storage. Pour obtenir des exemples, consultez Exemples d’accès en bloc à des données dans Stockage Blob Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

<bulk_options><bulk_options>
Spécifie un ou plusieurs arguments pour l'option BULK.Specifies one or more arguments for the BULK option.

CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }
Indique la page de codes des données dans le fichier.Specifies the code page of the data in the data file. CODEPAGE n’est justifié que si les données contiennent des colonnes de type char, varchar ou text dont les valeurs de caractères sont supérieures à 127 ou inférieures à 32.CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values more than 127 or less than 32.

Important

CODEPAGE n’est pas une option prise en charge sur Linux.CODEPAGE is not a supported option on Linux.

Notes

Nous vous recommandons de spécifier un nom de classement pour chaque colonne dans un fichier de format, sauf lorsque vous souhaitez que l’option 65001 soit prioritaire sur la spécification de page de codes/classement.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.

Valeur CODEPAGECODEPAGE value DescriptionDescription
ACPACP Convertit les colonnes de type de données char, varchar ou text de la page de codes ANSI/MicrosoftMicrosoft Windows (ISO 1252) à la page de codes 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 (valeur par défaut)OEM (default) Convertit les colonnes de type de données char, varchar ou text de la page de codes du système OEM à la page de codes 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 Aucune conversion n'a lieu d'une page de codes à une autre.No conversion occurs from one code page to another. Il s'agit de l'option la plus rapide.This is the fastest option.
code_pagecode_page Indique la page de codes source sur laquelle est basé l'encodage des données caractères du fichier de données, par exemple 850.Indicates the source code page on which the character data in the data file is encoded; for example, 850.

** Important ** Les versions antérieures à la version SQL Server 2016 (13.x)SQL Server 2016 (13.x) ne prennent pas en charge la page de codes 65001 (encodage 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'
Fichier utilisé pour collecter les lignes comportant des erreurs de mise en forme et impossibles à convertir en un ensemble de lignes OLE DB.Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Ces lignes sont copiées « en l'état » du fichier de données vers ce fichier d'erreur.These rows are copied into this error file from the data file "as is."

Le fichier d'erreur est créé au début de l'exécution de la commande.The error file is created at the start of the command execution. Une erreur est signalée si le fichier existe déjà.An error will be raised if the file already exists. De plus, un fichier de contrôle portant l'extension .ERROR.txt est créé.Additionally, a control file that has the extension .ERROR.txt is created. Il fait référence à chacune des lignes du fichier d’erreur et propose un diagnostic.This file references each row in the error file and provides error diagnostics. Lorsque les erreurs sont corrigées, les données peuvent être chargées.After the errors have been corrected, the data can be loaded.
S’applique à : 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. À partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x), error_file_path peut se trouver dans Stockage Blob Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name''errorfile_data_source_name'
S’applique à : 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. Source de données externe nommée pointant vers l’emplacement de Stockage Blob Azure du fichier d’erreur contenant les erreurs détectées lors de l’importation.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. La source de données externe doit être créée à l’aide de l’option TYPE = BLOB_STORAGE ajoutée dans 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. Pour plus d’informations, consultez CRÉER UNE SOURCE DE DONNÉES EXTERNES.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW =first_rowFIRSTROW =first_row
Numéro de la première ligne à charger.Specifies the number of the first row to load. La valeur par défaut est 1.The default is 1. Cela indique la première ligne du fichier de données spécifié.This indicates the first row in the specified data file. Les numéros des lignes sont déterminés en comptant les indicateurs de fin de ligne.The row numbers are determined by counting the row terminators. FIRSTROW commence à 1.FIRSTROW is 1-based.

LASTROW =last_rowLASTROW =last_row
Numéro de la dernière ligne à charger.Specifies the number of the last row to load. La valeur par défaut est 0.The default is 0. Cela indique la dernière ligne du fichier de données spécifié.This indicates the last row in the specified data file.

MAXERRORS =maximum_errorsMAXERRORS =maximum_errors
Spécifie le nombre maximal d'erreurs de syntaxe ou de lignes non conformes (défini dans le fichier de format) qui peuvent se produire avant que OPENROWSET lève une exception.Specifies the maximum number of syntax errors or nonconforming rows, as defined in the format file, that can occur before OPENROWSET throws an exception. Tant que la valeur de MAXERRORS n'est pas atteinte, OPENROWSET ignore les lignes incorrectes, ne les charge pas, et les compte comme des erreurs.Until MAXERRORS is reached, OPENROWSET ignores each bad row, not loading it, and counts the bad row as one error.

La valeur par défaut de maximum_errors est 10.The default for maximum_errors is 10.

Notes

MAX_ERRORS ne s’applique pas aux contraintes CHECK ni à la conversion des types de données money et 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
Spécifie le nombre approximatif de lignes de données que compte le fichier de données.Specifies the approximate number of rows of data in the data file. Cette valeur doit être du même ordre que le nombre réel de lignes.This value should be of the same order as the actual number of rows.

OPENROWSET importe toujours un fichier de données en un seul lot.OPENROWSET always imports a data file as a single batch. Toutefois, si vous spécifiez une valeur > 0 pour rows_per_batch, le processeur de requêtes se base sur la valeur de rows_per_batch pour allouer les ressources dans le plan de requête.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.

Par défaut, ROWS_PER_BATCH est inconnu.By default, ROWS_PER_BATCH is unknown. Si vous spécifiez ROWS_PER_BATCH = 0, le résultat est le même que si vous omettez 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 ] )
Indicateur facultatif qui spécifie la manière dont sont triées les données dans le fichier de données.An optional hint that specifies how the data in the data file is sorted. Par défaut, le processus de chargement en masse considère que le fichier de données n'est pas trié.By default, the bulk operation assumes the data file is unordered. Il est possible que les performances soient améliorées si l'optimiseur de requête peut exploiter l'ordre spécifié pour générer un plan de requête plus efficace.Performance might improve if the order specified can be exploited by the query optimizer to generate a more efficient query plan. Voici quelques exemples de situations dans lesquelles il peut être intéressant de spécifier un tri :Examples for when specifying a sort can be beneficial include the following:

  • Insertion de lignes dans une table qui a un index cluster, où les données d'un ensemble de lignes sont triées sur la clé d'index cluster.Inserting rows into a table that has a clustered index, where the rowset data is sorted on the clustered index key.

  • Jointure de l'ensemble de lignes avec une autre table, où les colonnes de tri et de jointure correspondent.Joining the rowset with another table, where the sort and join columns match.

  • Agrégation des données de l'ensemble de lignes en fonction des colonnes de tri.Aggregating the rowset data by the sort columns.

  • Utilisation de l'ensemble de lignes en tant que table source dans la clause FROM d'une requête, où les colonnes de tri et de jointure correspondent.Using the rowset as a source table in the FROM clause of a query, where the sort and join columns match.

UNIQUE spécifie que le fichier de données n'a pas d'entrées en double.UNIQUE specifies that the data file does not have duplicate entries.

Si les lignes réelles du fichier de données ne sont pas triées d'après l'ordre spécifié ou si l'indicateur UNIQUE est spécifié et si des clés en double sont présentes, une erreur est retournée.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.

Les alias de colonnes sont requis lorsque ORDER est utilisé.Column aliases are required when ORDER is used. La liste d'alias de colonnes doit référencer la table dérivée à laquelle accède la clause BULK.The column alias list must reference the derived table that is being accessed by the BULK clause. Les noms de colonnes qui sont spécifiés dans la clause ORDER font référence à cette liste d'alias de colonnes.The column names that are specified in the ORDER clause refer to this column alias list. Il n’est pas possible de spécifier des colonnes de types de valeur élevée (varchar(max), nvarchar(max), varbinary(max) et xml) et de types LOB (text, ntext et 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
Retourne le contenu de data_file sous la forme d’un ensemble de lignes à une seule ligne et une seule colonne de type varbinary(max).Returns the contents of data_file as a single-row, single-column rowset of type varbinary(max).

Important

Nous vous recommandons d'importer des données XML seulement au moyen de l'option SINGLE_BLOB, au lieu de SINGLE_CLOB et SINGLE_NCLOB, parce que seule l'option SINGLE_BLOB prend en charge toutes les conversions d'encodage de 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
La lecture de data_file au format ASCII retourne son contenu sous la forme d’un ensemble de lignes à une seule ligne et une seule colonne du type varchar(max) en utilisant le classement de la base de données active.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
La lecture de data_file au format UNICODE retourne son contenu sous la forme d’un ensemble de lignes à une seule ligne et une seule colonne du type nvarchar(max) en utilisant le classement de la base de données active.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.

Options de format de fichier d’entréeInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
S’applique à : 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.
Spécifie un fichier de valeurs séparées par des virgules conforme à la norme RFC 4180.Specifies a comma separated values file compliant to the RFC 4180 standard.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
Spécifie le chemin complet au fichier de format.Specifies the full path of a format file. SQL ServerSQL Server prend en charge deux types de fichiers de format : XML et non-XML.supports two types of format files: XML and non-XML.

Un fichier de format est requis pour définir les types des colonnes dans le jeu de résultats,A format file is required to define column types in the result set. excepté lorsque SINGLE_CLOB, SINGLE_BLOB ou SINGLE_NCLOB est spécifié ; dans ce cas, le fichier de format n'est pas requis.The only exception is when SINGLE_CLOB, SINGLE_BLOB, or SINGLE_NCLOB is specified; in which case, the format file is not required.

Pour plus d’informations sur les fichiers de format, consultez Utiliser un fichier de format pour importer des données en bloc (SQL Server).For information about format files, see Use a Format File to Bulk Import Data (SQL Server).

S’applique à : 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.
À partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, format_file_path peut être dans Stockage Blob Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage. Pour obtenir des exemples, consultez Exemples d’accès en bloc à des données dans Stockage Blob Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
S’applique à : 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.
Spécifie un caractère qui sera utilisé comme caractère de guillemet dans le fichier CSV.Specifies a character that will be used as the quote character in the CSV file. Si vous ne spécifiez pas cet argument, le caractère guillemet (") servira de caractère guillemet tel que défini dans la norme RFC 4180.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

Notes Remarks

OPENROWSET ne peut être utilisé pour accéder à des données distantes à partir de sources de données OLE DB uniquement si l’option de Registre DisallowAdhocAccess est explicitement définie sur 0 pour le fournisseur spécifié et que l’option de configuration avancée Ad Hoc Distributed Queries est activée.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. Lorsque ces options ne sont pas définies, le comportement par défaut n'autorise pas l'accès d'égal à égal.When these options are not set, the default behavior does not allow for ad hoc access.

Lors de l'accès à des sources de données OLE DB distantes, l'identité des connexions approuvées n'est pas automatiquement déléguée du serveur auquel le client est connecté au serveur qui est interrogé.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. Il est nécessaire de configurer la délégation de l'authentification.Authentication delegation must be configured.

Les noms de catalogues et de schémas sont requis si le fournisseur OLE DB prend en charge plusieurs catalogues et schémas dans la source de données spécifiée.Catalog and schema names are required if the OLE DB provider supports multiple catalogs and schemas in the specified data source. Les valeurs de catalog et )schema peuvent être omises si le fournisseur OLE DB ne les prend pas en charge.Values for catalog and )schema can be omitted when the OLE DB provider does not support them. Si le fournisseur prend en charge uniquement les noms de schémas, il est nécessaire de spécifier un nom en deux parties, sous la forme schéma.objet.If the provider supports only schema names, a two-part name of the form schema.object must be specified. Si le fournisseur prend en charge uniquement les noms de catalogues, il est nécessaire de spécifier un nom en trois parties, sous la forme catalogue.schéma.objet.If the provider supports only catalog names, a three-part name of the form catalog.schema.object must be specified. Vous devez spécifier des noms en trois parties pour les requêtes directes qui utilisent le fournisseur SQL ServerSQL Server Native Client OLE DB.Three-part names must be specified for pass-through queries that use the SQL ServerSQL Server Native Client OLE DB provider. Pour plus d’informations, consultez Conventions de la syntaxe Transact-SQL (Transact-SQL).For more information, see Transact-SQL Syntax Conventions (Transact-SQL).

OPENROWSET n’accepte pas de variables pour ses arguments.OPENROWSET does not accept variables for its arguments.

Tout appel à OPENDATASOURCE, OPENQUERY ou OPENROWSET dans la clause FROM est évalué séparément et indépendamment de tout appel à ces fonctions utilisé comme cible de la mise à jour, même si des arguments identiques sont fournis aux deux appels.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. En particulier, les conditions de filtre ou de jointure appliquées sur le résultat de l'un de ces appels n'ont aucun effet sur les résultats de l'autre.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

Utilisation de OPENROWSET avec l'option BULKUsing OPENROWSET with the BULK Option

Les améliorations Transact-SQLTransact-SQL suivantes prennent en charge la fonction OPENROWSET(BULK…) :The following Transact-SQLTransact-SQL enhancements support the OPENROWSET(BULK...) function:

  • Une clause FROM utilisée avec SELECT peut appeler OPENROWSET(BULK...) au lieu d’un nom de table, avec des fonctionnalités SELECT complètes.A FROM clause that is used with SELECT can call OPENROWSET(BULK...) instead of a table name, with full SELECT functionality.

    OPENROWSET utilisée avec l’option BULK nécessite un nom de corrélation, également baptisé variable de plage ou alias, dans la clause FROM.OPENROWSET with the BULK option requires a correlation name, also known as a range variable or alias, in the FROM clause. Vous pouvez définir des alias de colonnes.Column aliases can be specified. Si une liste d'alias de colonnes n'est pas spécifiée, le fichier de format doit comporter les noms des colonnes.If a column alias list is not specified, the format file must have column names. La spécification des alias de colonnes remplace les noms de colonnes dans le fichier de format, par exemple :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)

Important

Un échec d’ajout de AS <table_alias> génère l’erreur :Failure to add the AS <table_alias> will result in the error:
Msg 491, Niveau 16, État 1, Ligne 20Msg 491, Level 16, State 1, Line 20
Un nom de corrélation doit être spécifié pour l'ensemble de lignes en bloc dans la clause FROM.A correlation name must be specified for the bulk rowset in the from clause.

  • Une instruction SELECT...FROM OPENROWSET(BULK...) interroge directement les données d’un fichier, sans les importer dans une table.A SELECT...FROM OPENROWSET(BULK...) statement queries the data in a file directly, without importing the data into a table. Les instructions SELECT...FROM OPENROWSET(BULK...) peuvent également énumérer les alias de colonnes en bloc en utilisant un fichier de format pour spécifier les noms de colonnes ainsi que les types de données.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’utilisation de OPENROWSET(BULK...) en tant que table source dans une instruction INSERT ou MERGE importe en bloc les données d’un fichier de données dans une table 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. Pour plus d’informations, consultez Importer des données en bloc à l’aide de BULK INSERT ou OPENROWSET(BULK...) (SQL Server).For more information, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server) .

  • Lorsque l’option OPENROWSET BULK est utilisée avec une instruction INSERT, la clause BULK prend en charge les indicateurs de table.When the OPENROWSET BULK option is used with an INSERT statement, the BULK clause supports table hints. En plus des indicateurs de table standard, comme TABLOCK, la clause BULK peut accepter les indicateurs de table spécialisés suivants : IGNORE_CONSTRAINTS (ignore uniquement les contraintes CHECK et FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTS et 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. Pour plus d’informations, consultez Indicateurs de table (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Pour plus d’informations sur la manière d’utiliser INSERT...SELECT * FROM OPENROWSET(BULK...), consultez Importation et exportation en bloc de données (SQL Server).For information about how to use INSERT...SELECT * FROM OPENROWSET(BULK...) statements, see Bulk Import and Export of Data (SQL Server). Pour savoir à quel moment les opérations d’insertion de ligne effectuées par l’importation en bloc sont consignées dans le journal des transactions, consultez Conditions requises pour une journalisation minimale dans l’importation en bloc.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.

Notes

Lorsque vous utilisez OPENROWSET, il est important que vous compreniez la manière dont SQL ServerSQL Server gère l’emprunt d’identité.When you use OPENROWSET, it is important to understand how SQL ServerSQL Server handles impersonation. Pour plus d’informations sur la sécurité, consultez Importer des données en bloc à l’aide de BULK INSERT ou OPENROWSET(BULK...) (SQL Server).For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

L'importation en bloc de données SQLCHAR, SQLNCHAR ou SQLBINARYBulk Importing SQLCHAR, SQLNCHAR or SQLBINARY Data

OPENROWSET(BULK...) suppose que, si elle n'est pas spécifiée, la longueur maximale des données SQLCHAR, SQLNCHAR ou SQLBINARY ne dépasse pas 8 000 octets.OPENROWSET(BULK...) assumes that, if not specified, the maximum length of SQLCHAR, SQLNCHAR or SQLBINARY data does not exceed 8000 bytes. Si les données importées figurent dans un champ de données LOB qui contient des objets varchar(max), nvarchar(max) ou varbinary(max) qui dépassent 8 000 octets, vous devez utiliser un fichier de format XML qui définit la longueur maximale du champ de données.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. Pour spécifier la longueur maximale, modifiez le fichier de format et déclarez l'attribut MAX_LENGTH.To specify the maximum length, edit the format file and declare the MAX_LENGTH attribute.

Notes

Un fichier de format généré automatiquement ne spécifie pas la longueur ou la longueur maximale d'un champ LOB.An automatically generated format file does not specify the length or maximum length for a LOB field. Toutefois, vous pouvez modifier un fichier de format et spécifier manuellement la longueur ou la longueur maximale.However, you can edit a format file and specify the length or maximum length manually.

Exportation et importation en bloc de documents SQLXMLBulk Exporting or Importing SQLXML Documents

Pour exporter ou importer en bloc des données SQLXML, utilisez l'un des types de données ci-dessous dans votre fichier de format.To bulk export or import SQLXML data, use one of the following data types in your format file.

Type de donnéesData type EffetEffect
SQLCHAR ou SQLVARYCHARSQLCHAR or SQLVARYCHAR Les données sont envoyées dans la page de codes du client ou dans la page de codes impliquée par le classement.The data is sent in the client code page or in the code page implied by the collation).
SQLNCHAR ou SQLNVARCHARSQLNCHAR or SQLNVARCHAR Les données sont envoyées au format Unicode.The data is sent as Unicode.
SQLBINARY ou SQLVARYBINSQLBINARY or SQLVARYBIN Les données sont envoyées sans être converties.The data is sent without any conversion.

PermissionsPermissions

Les autorisations OPENROWSET sont conditionnées par les autorisations associées au nom d’utilisateur passé au fournisseur OLE DB.OPENROWSET permissions are determined by the permissions of the user name that is being passed to the OLE DB provider. L’utilisation de l’option BULK nécessite l’autorisation ADMINISTER BULK OPERATIONS.To use the BULK option requires ADMINISTER BULK OPERATIONS permission.

ExemplesExamples

A.A. Utilisation de OPENROWSET avec SELECT et le fournisseur SQL Server Native Client OLE DBUsing OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider

L’exemple suivant utilise le fournisseur SQL ServerSQL Server Native Client OLE DB pour accéder à la table HumanResources.Department de la base de données AdventureWorks2012AdventureWorks2012 sur le serveur distant 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'utilisation de SQLNCLI et SQL ServerSQL Server vous redirigera vers la version la plus récente du fournisseur SQL ServerSQL Server Native Client OLE DB.) Une instruction SELECT définit l'ensemble de lignes retourné.(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 chaîne de caractères du fournisseur contient les mots clés Server et Trusted_Connection.The provider string contains the Server and Trusted_Connection keywords. Ces mots clés sont reconnus par le fournisseur SQL ServerSQL Server Native Client OLE DB.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. Utilisation du fournisseur Microsoft OLE DB pour JetUsing the Microsoft OLE DB Provider for Jet

L'exemple suivant accède à la table Customers de la base de données MicrosoftMicrosoft Access Northwind via le fournisseur MicrosoftMicrosoft OLE DB pour Jet.The following example accesses the Customers table in the MicrosoftMicrosoft Access Northwind database through the MicrosoftMicrosoft OLE DB Provider for Jet.

Notes

L'exécution de ce code exemple suppose que Microsoft Access est installé.This example assumes that Access is installed. Pour exécuter ce code exemple, vous devez installer la base de données 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  

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

C.C. Utilisation de OPENROWSET avec une autre table dans une jointure interne INNER JOINUsing OPENROWSET and another table in an INNER JOIN

L’exemple de code suivant sélectionne toutes les données de la table Customers dans la base de données Northwind installée sur l’instance locale de SQL ServerSQL Server et dans la table Orders de la base de données Northwind Access stockée sur le même ordinateur.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.

Notes

L'exécution de ce code exemple suppose que Microsoft Access est installé.This example assumes that Access is installed. Pour exécuter ce code exemple, vous devez installer la base de données 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  

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

D.D. Utilisation de OPENROWSET pour insérer en bloc un fichier de données dans une colonne de type varbinary(max)Using OPENROWSET to bulk insert file data into a varbinary(max) column

Le code exemple suivant crée une petite table aux fins de démonstration et insère dans une colonne Text1.txt les données du fichier C: situé dans le répertoire racine 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  

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

E.E. Utilisation du fournisseur OPENROWSET BULK avec un fichier de format pour récupérer des lignes dans un fichier texteUsing the OPENROWSET BULK provider with a format file to retrieve rows from a text file

Le code exemple suivant utilise un fichier de format pour extraire des lignes d'un fichier texte dont les données sont délimitées par des tabulations, values.txt, qui contient les données suivantes :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  

Le fichier de format, values.fmt, décrit les colonnes du fichier 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  

Voici la requête qui récupère ces données :This is the query that retrieves that data:

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

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

F.F. Spécification d’un fichier de format et d’une page de codesSpecifying a format file and code page

L’exemple suivant montre comment utiliser à la fois les options de fichier de format et de page de codes en même temps.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. Accès aux données d’un fichier CSV avec un fichier de formatAccessing data from a CSV file with a format file

S’applique à : 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;  

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

H.H. Accès aux données d’un fichier CSV sans fichier de formatAccessing 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;

Important

Azure SQL Database ne prend pas en charge la lecture dans des fichiers Windows.Azure SQL Database does not support reading from Windows files.

I.I. Accès aux données d’un fichier stocké sur Stockage Blob AzureAccessing data from a file stored on Azure Blob storage

S’applique à : 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’exemple suivant utilise une source de données externe qui pointe vers un conteneur dans un compte de stockage Azure et des informations d’identification délimitées à la base de données créées pour une signature d’accès partagé.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;

Pour obtenir des exemples OPENROWSET complets, illustrant notamment la configuration des informations d’identification et de la source de données externe, consultez Exemples d’accès en bloc à des données dans Stockage Blob Azure.For complete OPENROWSET examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Autres exemplesAdditional Examples

Pour obtenir des exemples supplémentaires illustrant l’utilisation de INSERT...SELECT * FROM OPENROWSET(BULK...), consultez les rubriques suivantes :For additional examples that show using INSERT...SELECT * FROM OPENROWSET(BULK...), see the following topics:

 Voir aussiSee Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
Importation et exportation en bloc de données (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)
Fonctions d’ensemble de lignes (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)