jeudi 28 janvier 2010

Créer le script "Create Table" d'une table

Introduction
Il est quelque-fois nécessaire de déplacer ou dupliquer recréer plusieurs tables d'une DB à l'autre.

La technique la plus simple consiste en obtenir le script sql de création (Create Table) et de l'appliquer sur l'autre base de donnée.
Cette opération peut être effectuée manuellement ou automatiquement.

Option manuelle
Cette option est idéale lorsque l'opération doit être exécutée une seule fois et sur un nombre restreint de table (object).
A cette fin, l'on utilise les fonctionnalités du "Sql Management Studio" pour recréer ce script.
Ce procédé largement répandu est décris sur d'autres articles tel que "SQL SERVER – 2005 – Create Script to Copy Database Schema and All The Objects – Stored Procedure, Functions, Triggers, Tables, Views, Constraints and All Other Database Objects" publié sur Sql Authority.

Si cette solution est intéressante au cas par cas, elle à l'énorme inconvénient de nécessiter l'intervention humaine.

Option automatique
L'option automatique (à l'aide de code exécutable comme des stored procedure) à l'avantage de répéter une opération de façon systématique. C'est encore plus avantageux si la tâche est répétitive.
Bien qu'ayant déjà fureté un peu sur le net, il n'existe pas de "stored procedure" ou "extended procedure" permettant d'obtenir un tel script depuis Sql Server lui-même.
Pour le moment, seul SMO semble offrir une alternative intéressante.

Getting CREATE SCRIPT with SMO
Une solution possible pour obtenir le script de création d'un objet (table) est d'écrire un bout de code en VB ou .Net qui utilise l'API SMO (Sqlserver Management Object) pour obtenir les script en question.
Pour rappel, SMO est également l'API utilisée par "Sql Server Management Studio".


La discussion de cet article "Dynamic Stored Proc to generate Create Table Script ,taking table_name as parameter" fournit déjà un bout de code à partir duquel il est possible d'élaborer une solution.
SQL DBA Tip publie également l'article "Getting Started with SMO in SQL 2005" (avec code de démonstration).

Aucun commentaire: