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 :

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 :
Et voila, l’assistant génère un fichier ressemblant à :
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).
Avec Visual Studio
Visual Studio 2015 permet également de générer des scripts à partir des données d’une table :
Et voilà :
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 :
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…