Bonjour,
Ce message fait un peu suite a mon message précédent supprimer plusieurs colonnes en une seule requete.
J'avais simplifié mon problème de façon à le rendre plus clair avant de le poster sur le forum mais finalement du coup je suis passé a coté de mon vrai problème.
Voici mon problème, j'ai une table dans laquelle j'ai des colonnes a conserver (je connais le nom de celles-ci) et je dois supprimer toutes les autres (sans en connaitre leur nom)
Par exemple j'ai une table "MaTable" qui contient les champs suivants : col1,col2,col3,col4,col5,col6,col7
Je sais juste que je doit supprimer tous les champs de la table à l'exception de col1,col3 et col4. Le tout bien sur en ignorant que les autres colonnes s'appellent col2,col5,col6,col7
J'ai donc une requete pour retrouver le nom de toutes les colonnes que je dois supprimer :
Résultat : col2,col5,col6,col7
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT syscolumns.Name FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE sysobjects.name = 'MaTable' AND syscolumns.Name NOT IN ('col1', 'col3', 'col4')
Et je voudrais faire un drop de ces colonnes mais la requete échoue lorsque je fait :
Résultat : Syntaxe incorrecte vers le mot clé 'SELECT'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ALTER TABLE [MaTable] DROP COLUMN SELECT syscolumns.Name FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE sysobjects.name = 'MaTable' AND syscolumns.Name NOT IN ('col1', 'col3', 'col4')
(j'ai la même erreur si j'encapsule la sous-requête entre parenthèses)
Existe-t-il une façon de répondre a mon besoin en une seule requete sans devoir passer par un curseur qui ferai une boucle de DROP COLUMN ?
Edit : bon je ne suis pas borné je ne souhaite pas absolument avoir une seule requete pour faire cela mais j'aimerai au moins pouvoir me passer de la dizaine de lignes d'instructions qu'impliquerai l'utilisation d'un curseur.
Merci d'avance.
Partager