Bonjour,

J'ai un petit souci :

D'un côté, j'ai une table dont je ne connais pas les noms de colonnes (sauf la première qui ne change jamais) et qui peuvent être modifiées ou supprimées à n'importe quel moment.
En effet, cette table est importée depuis un fichier fourni que je ne maîtrise pas, on me l'envoi chaque nuit tel quel, et ses noms de colonnes peuvent changer à tout moment.
Bon, jusque-là, cela ne pose pas de problème pour moi, j'importe ce fichier dans une table de ma base, sans problème.

Par exemple, il s'agirait d'une Table "Caractéristiques" qui après import apparaîtrait comme ceci :
-------------------------------------------------------
REF1 | "CAR1" | "CAR2" | "CAR3" | CAR"4" | ...etc....
-------------------------------------------------------
"R1" | "valA" | "valB" | "valC" | "valD" | ...etc....
"R2" | "valD" | "valE" | "valF" | "valG" | ...etc....
..etc...
-------------------------------------------------------
Dans ces colonnes, j'ai une valeur dans la colonne "REF1" dont le nom de cette colonne est toujours présent et en première place.
J'ai ensuite des noms de colonnes du type "CARxx" qui peuvent changer à tout moment de place ou de nom.... je sais juste qu'ils commencent tous par "CAR".
Je sais donc lister ces noms de colonnes pour cette table, après import et grâce à une requête sql.

Là où je bloque, c'est que j'aimerais faire un curseur (ou autre), me permettant de boucler sur chaque nom de colonne de cette table, afin de pouvoir, dans une procédure stockée, faire un traitement adaptée pour chaque colonne et les valeurs qu'elle contient.

Par exemple faire un :
select count(*) from Caractéristiques where REF1='R1' and "CAR1"='valA'
Si la requête ci-dessus me donne un résultat, je dois faire un traitement derrière.

Sauf que je ne vois pas comment faire ça....

Mon point de départ était de créer un curseur en le renseignant avec une requête qui me retour les noms de colonnes, du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT name as colname FROM sys.columns WHERE object_id = OBJECT_ID('Caractéristiques '
retournerait ainsi :
CAR1
CAR2
CAR3
CAR4
...etc...
Mais ensuite, avec ça dans mon curseur, pour chaque nom, je voudrais pouvoir attaquer ma table "Caractéristiques " par le nom de la colonne correspondante... en utilisant quelque chose du genre "COL_NAME()" de sql ?
Mais j'ai pas trouvé comment faire, rien ne marche...

Est-ce possible de faire quelque chose comme cela ?
Peut-on, au lieu de mettre le nom de la colonne dans le where, utiliser une astuce pour l'ajouter à partir d'une variable du type chaine ?


Merci pour toute l'aide que vous pourrez m'apporter....

Cordialement.