Importation de données en bloc à l'aide de BULK INSERT ou OPENROWSET(BULK...)

Mis à jour : 17 juillet 2006

Cette rubrique fournit une vue d'ensemble de l'utilisation de l'instruction BULK INSERT Transact-SQL et de l'instruction INSERT...SELECT * FROM OPENROWSET(BULK...) destinées à l'importation en bloc de données à partir d'un fichier de données dans une table Microsoft SQL Server. Cette rubrique décrit aussi des règles de sécurité relatives à l'utilisation de BULK INSERT et OPENROWSET(BULK…), et l'utilisation de ces méthodes pour l'importation en bloc à partir d'une source de données distante.

ms175915.note(fr-fr,SQL.90).gifRemarque :
Lorsque vous utilisez BULK INSERT ou OPENROWSET(BULK…), il est important de comprendre la manière dont SQL Server 2005 gère l'emprunt d'identité. Pour plus d'informations, consultez « Considérations sur la sécurité» plus loin dans cette rubrique.

Instruction BULK INSERT

BULK INSERT charge les données d'un fichier de données dans une table. Cette fonctionnalité est similaire à celle fournie par l'option in de la commande bcp, mais le fichier de données est lu par le processus SQL Server. Pour une description de la syntaxe BULK INSERT, consultez BULK INSERT (Transact-SQL).

Exemples

Pour des exemples BULK INSERT, consultez :

Fonction OPENROWSET(BULK…)

SQL Server 2005 introduit le fournisseur de l'ensemble de lignes en bloc OPENROWSET accessible en appelant la fonction OPENROWSET et en spécifiant l'option BULK. La fonction OPENROWSET(BULK…) vous permet d'accéder aux données distantes en vous connectant à une source de données distante (un fichier de données) par l'intermédiaire d'un fournisseur OLE DB.

Pour importer en bloc des données, appelez OPENROWSET(BULK…) à partir d'une clause SELECT…FROM dans une instruction INSERT. La syntaxe de base pour l'importation en bloc de données est la suivante :

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Lorsqu'elle apparaît dans une instruction INSERT, OPENROWSET(BULK...) prend en charge les indicateurs de table. Outre les indicateurs de table usuels, tels que TABLOCK, la clause BULK accepte les indicateurs de table spécialisés suivants : IGNORE_CONSTRAINTS (ignore uniquement les contraintes CHECK), IGNORE_TRIGGERS, KEEPDEFAULTS et KEEPIDENTITY. Pour plus d'informations, consultez Indicateur de table (T-SQL).

Pour plus d'informations sur les autres utilisations de l'option BULK, consultez OPENROWSET (Transact-SQL).

Exemples

Pour des exemples d'instructions INSERT...SELECT * FROM OPENROWSET(BULK...), consultez les rubriques suivantes :

Considérations sur la sécurité

Si un utilisateur a recours à une connexion SQL Server, le profil de sécurité du compte du processus SQL Server est alors utilisé.

Par opposition, si un utilisateur SQL Server s'est connecté via l'authentification Windows, il peut lire uniquement les fichiers accessibles par le compte d'utilisateur, indépendamment du profil de sécurité du processus SQL Server.

Prenons l'exemple d'un utilisateur qui s'est connecté à une instance de SQL Server à l'aide de l'authentification Windows. Pour que cet utilisateur puisse utiliser BULK INSERT ou OPENROWSET en vue d'importer les données d'un fichier dans une table SQL Server, le compte d'utilisateur nécessite des droits d'accès en lecture au fichier de données. En bénéficiant de droits accès au fichier de données, l'utilisateur peut importer les données du fichier dans une table même si le processus SQL Server n'a pas l'autorisation d'accéder au fichier. L'utilisateur n'est pas obligé d'accorder au processus SQL Server une autorisation d'accès au fichier.

SQL Server et Microsoft Windows peuvent être configurés afin de permettre à une instance de SQL Server de se connecter à une autre instance de SQL Server en transmettant les informations d'un utilisateur Windows authentifié. Ce procédé est appelé emprunt d'identité ou délégation. Il importe de comprendre comment SQL Server 2005 gère les aspects de sécurité en matière d'emprunt d'identité lorsque vous utilisez l'instruction BULK INSERT ou OPENROWSET. L'emprunt d'identité permet au fichier de données de résider sur un ordinateur différent du processus SQL Server ou de l'utilisateur. Par exemple, si un utilisateur sur Ordinateur_A a accès à un fichier de données sur Ordinateur_B, et que la délégation des informations d'identification a été correctement définie, l'utilisateur peut se connecter à une instance de SQL Server s'exécutant sur Ordinateur_C, accéder au fichier de données sur Ordinateur_B, et importer les données en bloc de ce fichier dans une table résidant sur Ordinateur_C. Pour plus d'informations, consultez Vue d'ensemble de l'emprunt d'identité.

ms175915.note(fr-fr,SQL.90).gifRemarque :
La façon dont SQL Server 2005 contrôle l'accès aux fichiers résout un problème de sécurité qui existait dans Microsoft SQL Server 2000 et les versions précédentes. Auparavant, une fois l'utilisateur authentifié, l'accès aux fichiers externes reposait sur le profil de sécurité du processus SQL Server. Lorsque le processus SQL Server disposait d'un droit d'accès en lecture à un fichier, il suffisait à un utilisateur n'ayant pas accès au fichier d'être membre du rôle de serveur fixe bulkadmin pour pouvoir importer le fichier à l'aide de la commande BULK INSERT et accéder au contenu du fichier.

Importation en bloc à partir d'un fichier de données distant

Pour utiliser BULK INSERT ou INSERT...SELECT * FROM OPENROWSET(BULK...) pour effectuer l'importation en bloc de données à partir d'un autre ordinateur, le fichier de données doit être partagé entre les deux ordinateurs. Pour spécifier un fichier de données partagé, utilisez son nom UNC (Universal Naming Convention), dont le format général est **\\Servername\Sharename\Path\**Filename. Le compte d'utilisateur utilisé par SQL Server doit avoir reçu les autorisations requises pour lire le fichier sur le disque distant.

Par exemple, l'instruction BULK INSERT ci-dessous importe en bloc des données dans la table SalesOrderDetail de la base de données AdventureWorks à partir d'un fichier de données nommé newdata.txt. Ce fichier de données réside dans un dossier partagé nommé \dailyorders, dans un répertoire partagé du réseau nommé salesforce, sur un système nommé computer2.

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
ms175915.note(fr-fr,SQL.90).gifRemarque :
Cette restriction ne s'applique pas à l'utilitaire bcp car le fichier est lu par le client, indépendamment de SQL Server.

Voir aussi

Concepts

Importation et exportation de données en bloc
À propos des opérations d'exportation et d'importation en bloc
Consignes de base concernant l'importation de données en bloc

Autres ressources

INSERT (Transact-SQL)
Vue d'ensemble de l'emprunt d'identité
INSERT (Transact-SQL)
Clause SELECT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
Utilitaire bcp
BULK INSERT (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

17 juillet 2006

Contenu modifié :
  • Déplacement du contenu sur l'utilitaire bcp vers la nouvelle rubrique Importation et exportation des données en bloc à l'aide de l'utilitaire bcp.
  • Révision de la section sur la « Fonction OPENROWSET(BULK…) »
  • Insertion des sections « Considérations sur la sécurité » et « Importation en bloc à partir d'un fichier de données distant ».
  • Ajout des liens « Exemples supplémentaires » vers des rubriques conceptuelles contenant des exemples.

5 décembre 2005

Nouveau contenu :
  • Une présentation a été ajoutée sur la manière d'utiliser une commande Transact-SQL pour importer des données à partir d'un fichier de données distant.