Lors du développement d’une application utilisant SQL Server on peut avoir besoin d’initialiser des tables avec quelques lignes. Par exemple il est utile qu’une table “Category” contienne quelques lignes dès le démarrage de l’application. On crée donc ces lignes dans la base de données avec l’outil que l’on souhaite (rarement une ligne SQL INSERT) puis exporter ces lignes fraichement créées pour que les autres développeurs puissent les ajouter sur leur poste.

Dans la suite de l’article nous allons voir 2 façons d’exporter et importer des données : soit en générant un script SQL, soit en utilisant l’utilitaire BCP.

Microsoft SQL Server Database Publishing Wizard

SQL Server Management Studio fourni un assistant pour générer un script SQL à partir d’une base de données :

http://old.softfluent.fr/blog/expertise/337076551_image_265.png

Il est possible de filtrer les éléments à générer. Si vous voulez exporter les données d’une ou plusieurs tables, il suffit de cocher les tables souhaitées :

http://old.softfluent.fr/blog/expertise/337076551_image_266.png

De nombreuses options de génération sont disponibles dans les options avancées :

http://old.softfluent.fr/blog/expertise/337076551_image_267.png

Par défaut seul le schéma est généré, il faut donc changer cette option :

http://old.softfluent.fr/blog/expertise/337076551_image_268.png

Et voila, l’assistant génère un fichier ressemblant à :

http://old.softfluent.fr/blog/expertise/337076551_image_269.png

Cette méthode est simple grâce à l’assistant. De nombreuses options sont disponibles pour personnaliser le script final.

Note : Avant d’être intégré à SQL Server Management Studio, SQL Server Publishing Wizard était un outil à part (http://go.microsoft.com/fwlink/?LinkId=119368).

A lire sur le même sujet : Requête récursive avec SQL Server

Avec Visual Studio

Visual Studio 2015 permet également de générer des scripts à partir des données d’une table :

http://old.softfluent.fr/blog/expertise/337076551_image_270.png

Et voilà :

http://old.softfluent.fr/blog/expertise/337076551_image_271.png

Contrairement à la première solution, on peut exporter seulement les données d’une table à la fois. C’est donc un peu moins pratique si on veut exporter les données de plusieurs tables mais ça peut suffire dans certains cas…

BCP

BCP (Bulk Copy) est un utilitaire en ligne de commande permettant d’exporter ou d’importer rapidement des données. Contrairement aux solutions précédentes le fichier généré n’est pas une suite de commandes INSERT, mais un fichier texte ou natif (selon les options)

Exporter

bcp Sample.dbo.Employee out "%USERPROFILE%\desktop\export.dat" –n -N -T -S (LocalDb)\MSSQLLocalDB

Le fichier généré est un fichier peu lisible par un humain mais facile à importer par SQL Server :

http://old.softfluent.fr/blog/expertise/337076551_image_272.png

Importer

bcp Sample.dbo.Employee in "%USERPROFILE%\desktop\export.dat" –n -N -T -S (LocalDb)\MSSQLLocalDB

ou en SQL

BULK INSERT dbo.Employee    
   FROM 'C:\users\meziantou\desktop\export.dat'     
   WITH (DATAFILETYPE='widenative');

BCP dispose de nombreuses options pour personnaliser l’export et l’import. Par exemple “-E” permet de conserver les valeurs d’une colonne auto-incrémentée.

Conclusion

Vous avez maintenant le choix entre 3 méthodes différentes pour exporter les lignes d’une ou plusieurs tables. Si vous n’avez pas besoin de générer un script SQL à base d’INSERT, il est préférable d’utiliser BCP car plus rapide. En cherchant un peu sur internet vous pouvez également trouver des procédures stockées pour générer les INSERT (un exemple), cependant elles sont souvent compliquées et il est difficile de savoir si elles fonctionnent correctement…

Ne ratez plus aucune actualité avec la newsletter mensuelle de SoftFluent

Newsletter SoftFluent