Table des matières 1 TRANSFERT DE DONNÉES... 2 1.1 BULK INSERT... 2 1.2 OPENROWSET... 4 1.3 BCP... 5 2011 Hakim Benameurlaine 1
1 TRANSFERT DE DONNÉES Pour transférer des données, il existe différentes méthodes, différentes les unes des autres. Toutes ces méthodes ont pour objectifs de transférer des données, mais ont des périmètres d utilisation différents. Nous allons voir les différentes méthodes de transfert de données avec des bases SQL Server, mais gardons à l esprit que tout SGDB qui se respecte fournit le même genre d outil. 1.1 BULK INSERT La commande bulk insert est la version T-SQL de l utilitaire bcp. Cependant, bulk insert n est pas capable d exporter des données et se limite donc à l importation (Insert). L avantage de cette commande est le fait qu elle puisse être utilisée dans un script T-SQL, et donc directement depuis une fenêtre de commande de SQL Server, ou lors de chargement de base de données par l intermédiaire de script. Du point de vue de la sécurité, au niveau SQL Server, il faut posséder des permissions Insert et Admin Bulk Operation, ainsi que Alter Table, pour pouvoir utiliser Bulk Insert avec succès. si le mode d authentification est Windows dans SQL Server, les privilèges sur le fichiers sont les privilèges du compte de l utilisateur ; cependant si le mode d authentification est SQL Server, les privilèges sur le fichier seront ceux du compte utilisateur par SQL Server (par défaut Local System). 2011 Hakim Benameurlaine 2
Créer la table test1 : CREATE TABLE test1 c:\sql> bcp formation.dbo.test1 format nul -c -t, -f Faire le bulk insert : c:\sql\load1.fmt -T BULK INSERT test1 FROM 'c:\sql\load.txt' WITH (FORMATFILE = 'c:\sql\load1.fmt',errorfile = 'c:\sql\load1.log') SELECT count(*) FROM test1 2011 Hakim Benameurlaine 3
1.2 OPENROWSET SQL Server propose plusieurs options pour l importation de documents xml. Ici nous allons étudier la méthode la plus commune, la fonction OpenRowSet(), mais il existe également des procédures stockées, la fonction OpenXml(),XQuery, XPath La fonction OpenRowSet() peut être utilisée comme référence de table pour des instructions Select, Insert, Update ou Delete. Son principal avantage est de faire apparaitre un fichier xml directement comme une table, et de pouvoir le modifier, sans avoir à le charger au préalable dans la base. Créer la table test2 : CREATE TABLE test2 bcp formation.dbo.test2 format nul -c -t, -f c:\sql\load2.fmt -T Faire le insert: INSERT INTO test2 (c1,c2,c3) SELECT t1.c1,t1.c2,t1.c3 FROM OPENROWSET( BULK 'c:\sql\load.txt', FORMATFILE = 'c:\sql\load2.fmt', ERRORFILE = 'c:\sql\load2.log') AS t1(c1,c2,c3) SELECT count(*) FROM test2 2011 Hakim Benameurlaine 4
1.3 BCP Bcp, pour bulk copy program, est un utilitaire de ligne de commande qui permet l importation ou l exportation rapide des données à partir ou vers un fichier. Cet utilitaire a DEUX principales limites : Il possède des fonctionnalités ETL limitées. Il possède des fonctionnalités de gestions des erreurs limitées. Malgré cela, il reste un utilitaire très performant et adapté si le besoin est uniquement de charger/décharger des données, étant données qu il peut être intégré à un script Windows, et ensuite configuré pour s exécuter périodiquement. Avant d exécuter bcp sur une table, assurez vous d avoir au moins les autorisations select, insert et alter table sur cette table. Créer la table test3 : CREATE TABLE test3 bcp formation.dbo.test3 format nul -c -t, -f c:\sql\load3.fmt -T Faire bcp: exec master..xp_cmdshell 'bcp formation.dbo.test3 in c:\sql\load.txt -T -b1000000 -fc:\sql\load3.fmt' SELECT count(*) FROM test3 2011 Hakim Benameurlaine 5