Importation de données en bloc à l'aide de BULK INSERT ou OPENROWSET(BULK...)
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 MicrosoftSQL 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.
[!REMARQUE]
Lorsque vous utilisez BULK INSERT ou OPENROWSET(BULK…), il est important de comprendre la manière dont SQL Server 2005 et les versions ultérieures gèrent 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 obtenir une description de la syntaxe BULK INSERT, consultez BULK INSERT (Transact-SQL).
Exemples
Pour des exemples BULK INSERT, consultez :
Exemples d'importation et d'exportation en bloc de documents XML
Conservation des valeurs d'identité lors de l'importation de données en bloc
Conservation des valeurs NULL ou utilisation des valeurs par défaut lors de l'importation en bloc
Spécification des indicateurs de fin de champ et de fin de ligne
Utilisation d'un fichier de format pour importer des données en bloc
Utilisation du format caractère pour importer ou exporter des données
Utilisation du format natif pour importer ou exporter des données
Utilisation du format caractère Unicode pour importer ou exporter des données
Utilisation du format natif Unicode pour importer ou exporter des données
Utilisation d'un fichier de format pour ignorer une colonne de table
Fonction OPENROWSET(BULK…)
Le fournisseur d'ensembles de lignes en bloc OPENROWSET est 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. En plus des indicateurs de table normaux, tels que TABLOCK, la clause BULK peut accepter 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 Indicateurs de table (Transact-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 :
Exemples d'importation et d'exportation en bloc de documents XML
Conservation des valeurs d'identité lors de l'importation de données en bloc
Conservation des valeurs NULL ou utilisation des valeurs par défaut lors de l'importation en bloc
Utilisation d'un fichier de format pour importer des données en bloc
Utilisation du format caractère pour importer ou exporter des données
Utilisation d'un fichier de format pour ignorer une colonne de table
Utilisation d'un fichier de format pour ignorer un champ de données
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 et les versions ultérieures gèrent 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 Présentation de l'emprunt d'identité.
[!REMARQUE]
La façon dont SQL Server 2005 et les versions ultérieures contrôlent l'accès aux fichiers résout un problème de sécurité qui existait dans MicrosoftSQL 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 **\\NomServeur\NomPartage\Chemin\**NomFichier. En outre, le compte utilisé pour accéder au fichier de données 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
[!REMARQUE]
Cette restriction ne s'applique pas à l'utilitaire bcp car le fichier est lu par le client, indépendamment de SQL Server.
Voir aussi