Importer des données en bloc à l'aide de BULK INSERT ou OPENROWSET(BULK...) (SQL Server)
Cette rubrique fournit une vue d'ensemble de l'utilisation de l'instruction Transact-SQL BULK INSERT 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 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.
[!REMARQUE]
Lorsque vous utilisez BULK INSERT ou OPENROWSET(BULK…), il est important de comprendre la manière dont la version de SQL Server 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 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 (SQL Server)
Conserver des valeurs d'identité lors de l'importation de données en bloc (SQL Server)
Spécifier des indicateurs de fin de champ et de fin de ligne (SQL Server)
Utiliser un fichier de format pour importer des données en bloc (SQL Server)
Utiliser le format caractère pour importer ou exporter des données (SQL Server)
Utiliser le format natif pour importer ou exporter des données (SQL Server)
Utiliser le format caractère Unicode pour importer ou exporter des données (SQL Server)
Utiliser le format natif Unicode pour importer ou exporter des données (SQL Server)
Utiliser un fichier de format pour ignorer une colonne de table (SQL Server)
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 (SQL Server)
Conserver des valeurs d'identité lors de l'importation de données en bloc (SQL Server)
Utiliser un fichier de format pour importer des données en bloc (SQL Server)
Utiliser le format caractère pour importer ou exporter des données (SQL Server)
Utiliser un fichier de format pour ignorer une colonne de table (SQL Server)
Utiliser un fichier de format pour ignorer un champ de données (SQL Server)
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é. Une connexion via l'authentification SQL Server ne peut pas être authentifiée en dehors du moteur de base de données. Par conséquence, lorsqu'une commande BULK INSERT est initiée par une connexion via l'authentification SQL Server, la connexion aux données s'effectue à l'aide du contexte de sécurité du compte du processus SQL Server (compte utilisé par le service de moteur de base de données SQL Server). Pour pouvoir lire les données sources, vous devez octroyer au compte utilisé par le moteur de base de données SQL Server l'accès aux données sources. 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 la version de SQL Servergè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.
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. 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 AdventureWorks2012.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.