Insertion sans connaitre la structure
Bonjour,
Je réalise un script qui dois migrer des bases de données.
A l'époque le suivi des versions étaient très mauvais. Par conséquent la table "maTable" contient toujours "colonne1", "colonne2", mais parfois, elle contient "colonne3".
J'avais donc pensé à ce script de migration
Code:
1 2 3 4 5 6 7 8 9
|
/* Soit colonne3_existe un booléen à vrai quand la colonne 3 existe */
/* colonne3_existe est parfaitement initialisé à la bonne valeur */
IF @colonne3_existe
INSERT INTO ancienne_base.dbo.maTable (colonne1,colonne2,colonne3)
SELECT n.colonne1,n.colonne2,n.colonne3 FROM nouvelle_base.dbo.maTable
ELSE
INSERT INTO ancienne_base.dbo.maTable (colonne1,colonne2)
SELECT n.colonne1,n.colonne2 FROM nouvelle_base.dbo.maTable |
Malheureusement, ce script ne marche pas car si je suis dans le cas où ma colonne n'existe pas, il me génère tout de même une erreur lorsque le SGBD analyse l'existence des colonnes.
Avez-vous une idée ?
Re: Insertion sans connaitre la structure
J'ai trouvé la solution à l'aide de l'instruction execute
Code:
1 2 3 4 5 6 7 8 9
|
/* Soit colonne3_existe un booléen à vrai quand la colonne 3 existe */
/* colonne3_existe est parfaitement initialisé à la bonne valeur */
IF @colonne3_existe
EXECUTE ('INSERT INTO ancienne_base.dbo.maTable (colonne1,colonne2,colonne3)
SELECT n.colonne1,n.colonne2,n.colonne3 FROM nouvelle_base.dbo.maTable')
ELSE
EXECUTE('INSERT INTO ancienne_base.dbo.maTable (colonne1,colonne2)
SELECT n.colonne1,n.colonne2 FROM nouvelle_base.dbo.maTable') |