Ajouter des colnnes automatiquement a une table sqlexpress

cs_frrodg Messages postés 8 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 11 janvier 2013 - 28 déc. 2012 à 00:38
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 11 janv. 2013 à 13:46
Bonjour,
j'ai une bd \sqlexpress.GestionCLUB1.dbo à la quelle j'ajoute une colonne
avec la syntaxe :[code=VB]["ALTER TABLE MEMBRES ADD [ANNEE] VARCHAR(12)"], cela fontionne très bien, mais je voudrais que ANNEE soit une variable,
expl: [ANNEE as string ="2012/2013"]
Quelqu'un peut-il m'aider.
merci

L'amateur retraitée

11 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
28 déc. 2012 à 09:33
Salut,

si tu manages ta base avec du VB il suffit de faire une concaténation de chaînes de caractères lorsque tu génères ta requête.

Par contre je suis pas sûr de ce que tu recherches :
- tu veux que ta champ se nomme différemment,
- ou que ton champ prenne pour chaque tuple une valeur prédéfinie.
Dans le premier cas évite de donner à tes champs un nom qui commence par un chiffre.
0
cs_frrodg Messages postés 8 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 11 janvier 2013
28 déc. 2012 à 12:35
Salut.jopo
Pour être un peut plus claire,
Il existe une table dans une bd, cette table est mise à jour avec divers informations pendant une saison.
Lors du changement de saison certaines données doivent être transférées dans une nouvelle colonne qui sert d'archivage. au mois de juin date de changement de saison je devrais pouvoir créer une nouvelles colonne qui porte le nom de la saison écoulée. Dans le cas qui préoccupe une colonne qui a pour nom [2012/2013], et en juin 2013 le programme devait ajouter une colonne qui se nome[2013/2014].
[code=vb][ DIM ANNEE as string ="2012/2013"]
[code=vb]["ALTER TABLE MEMBRES ADD " & [ANNEE] & " VARCHAR(12)"]
De cette manière sa fonctionne pas

L'amateur retraité
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
28 déc. 2012 à 15:24
Oui, cela ne fonctionne pas pour plusieurs raisons :

- écrire une requête au milieu de nulle part dans du code VB ne la fait pas s'exécuter. Il faut paramétrer une connexion, l'ouvrir puis exécuter ta requête ALTER TABLE (et accessoirement penser à refermer la connexion). Pour ce point je vais supposer que tu as simplement écrit comme ça à titre informatif.

- en VB si ta variable s'appelle ANNEE alors tu y accèdes en écrivant ANNEE et non [ANNEE].

- comme conseillé précédemment tu ne devrais donner à tes colonnes des noms commençant par un chiffre (ou contenant un slash), préfère un truc du genre saison_2012_2013.

- enfin, et là c'est un avis perso, je pense que, conceptuellement, ajouter une colonne n'est pas la bonne solution, une table externe (genre MEMBRES_SAISONS) me paraît plus appropriée :
----> tu ne seras plus limité par le nombre max de colonnes accepté par ton SGBD,
----> pour une nouvelle saison il suffira de faire des INSERT et nom des ALTER TABLE (qui peuvent être particulièrement fastidieux quand tu auras des millions d'enregistrement et des centaines de colonnes),
----> tes saisons seront représentées par des valeurs de champs, tu pourras donc les nommées comme tu le souhaites (ex. 2012/2013) voire même en faire une valeur numérique ou une date ce qui permettra ensuite un requêtage aisé.
0
cs_frrodg Messages postés 8 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 11 janvier 2013
28 déc. 2012 à 19:43
Salut jopop,

Je pense que l'on ne se comprend pas,
1. ["ALTER TABLE MEMBRES ADD ANNEE VARCHAR(12)"] , ne sort pas de nul part, cela fait partie d'une requête sql, mais pour éviter d’écrire j'ai simplifié et la fonction fonctionne très bien tant que ANNEE EST = a ANNEE.
2. [ANNEE] EST BIEN écrit sans les crochets je les ai mis pour attiré l'attention.
3. Quand à la table supplémentaire c'est une solution, mais de un je peux ajouter manuellement 10 0u 20 saisons a la table, quand tu parles de centaines de colonnes, nous serions en l'an 2112, moi qui ai 70 ans je ne le verrai plus ... enfin je suppose.
4. Si j'essaie de travailler avec ALTER TABLE [AVEC UNE VARIABLE] c'est un peux par amusement....mais je pense qu'il un moyen d'y arriver.

Merci pour ton suivi et bonnes fëtes.


L'amateur retraité
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_frrodg Messages postés 8 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 11 janvier 2013
28 déc. 2012 à 19:59
Re jopop,
Voilà j'ai trouver grâce à ta dernière intervention, en effet ANNEE="2012/2013"
n'est pas valable il faut mettre ANNEE ='_2012_2013'
Voilà mon problème est résolut
Encore merci

Ps: je sais pas comment on fait pour clôturer [Résolut]

L'amateur retraité
0
cs_frrodg Messages postés 8 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 11 janvier 2013
28 déc. 2012 à 20:01
il faut mettre ANNEE ="_2012_2013" et non ='_2012_2013'


L'amateur retraité
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 déc. 2012 à 16:06
Bonjour,

Juste pour infortmation,
en sql-server on peut tout à fait mettre des noms de colonnes avec des chiffres et des slashs, il suffit de toujours mettre les crochets quant on référence la colonne.

alter table MA_TABLE
add [2012/2013] varchar(35) null;

select [2012/2013], autreChamp from MA_TABLE;


Tu avais presque la bonne requete dans ton vb, sauf les crochets.
"ALTER TABLE MEMBRES ADD [" & ANNEE & "] VARCHAR(12)"


bye...
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
3 janv. 2013 à 10:34
Oki pour l'oublie des guillemets dans la requête:)

Sinon, et ce malgré le message de yann_lo_san, je continue à déconseiller les caractères spéciaux et les noms commençant par des chiffres pour les noms de champ (perso j'utilise même pas de majuscule). C'est bien beau que SQL Server le fasse, mais attention aux erreurs à la moindre requête et bonne chance si un jour tu dois porter ton archi sur un autre SGBD.

Par exemple en C# on est censé pouvoir utiliser les accents dans les noms de variable, et pourtant c'est fortement déconseillé, y compris par Crosoft.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
3 janv. 2013 à 13:54
Salut,

Effectivement,
Microsoft laisse une grande liberté d'action dans ses outils de développement,
et quelquechose que l'on PEUT FAIRE n'est pas nécessairement ce que l'on DOIT FAIRE.

Bye...
0
cs_frrodg Messages postés 8 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 11 janvier 2013
11 janv. 2013 à 00:45
Merci à vous deux pour vos réponses.
Pour dernière information, lorsqu'on écrit
add [2012/2013] varchar(35) null,
la colonne ajoutée dans la table est _2012_2013
Encore merci. Fin du problème
L'amateur retraité
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
11 janv. 2013 à 13:46
Re,

je ne sais pas quelle version tu utilises mais moi j'ai bien le nom de colonne que je donne :

exemple :

create table #test
(
id int,
[2012/2013] varchar(35) null
);

select  
nomtable = left(t.name, CHARINDEX('_', t.name)-1), 
nomColonne = c.name
from 
tempdb.sys.tables t 
inner join tempdb.sys.columns c on c.object_id = t.object_id
where 
t.name like '#test%' and t.type='U'

drop table #test


Mon résultat :

nomtable nomColonne
#test id
#test 2012/2013

bye...
0
Rejoignez-nous