mankinder
Messages postés18Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention28 septembre 2012
-
30 juin 2007 à 01:46
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
30 juin 2007 à 23:48
Bonjour,
je cherche la requête qui pourrait me permettre de vider les champs dont la valeur est précisée.
Ex :
- Nom de la Table = EMPLOYES- Nom du Champ 1 PASCAL => Contient la donnée : Stagiaire - Nom du Champ 2 LAURENCE => Contient la donnée : Interimaire - Nom du Champ 3BENOIT => Contient la donnée : Interimaire - Nom du Champ 4 VALERIE => Contient la donnée : Stagiaire - Nom du Champ 5ERIC > Contient la donnée : Interimaire
Voilà, je voudrais que ma requête vide tout les champs qui contiennent la valeur "Stagiaire"
Est ce possible ?
Je pense que je suis sur mes codes depuis trop longtemps et tout s'embrouille dans mon esprit ^^
(Si vous vous reconnaissez dans cet exemple, rassurez vous, vous n'êtes pas licencié, juste promu )
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014100 30 juin 2007 à 22:07
Ok, je ne pourrais donc pas t'aider directement.
Donc en gros :
UPDATE EMPLOYES SET PASCAL=NULL WHERE PASCAL='Stagiaire';
UPDATE EMPLOYES SET LAURENCE=NULL WHERE LAURENCE='Stagiaire';
UPDATE EMPLOYES SET BENOIT=NULL WHERE BENOIT='Stagiaire';
...
Le tout étant de générer les 45 requêtes sans les faire à la main.
Si tu as besoin d'un point de départ, voici un script utilisable sous SQL Server qui trainait, je l'ai dégrossi "à la hache" mais il va falloir que tu finisses de l'adapter pour MySQL (logiquement les vues INFORMATION_SCHEMA.* sont identiques, reste les fonctions comme QUOTENAME & co, les filtres sur schéma et types de données, ajouter des filtres sur les colonnes non concernées) :
USE Test;
DECLARE @ColumnName nvarchar(128);
SET @ColumnName = '';
SET NOCOUNT ON;
WHILE (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'EMPLOYES'
AND DATA_TYPE IN ('char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
EXEC
( 'UPDATE EMPLOYES SET ' + @ColumnName + ' NULL WHERE ' + @ColumnName + ' ''Stagiaire'''
)
END
END
A la rigueur, remplace l'execution directe par un PRINT (ou équivalent MySQL), ce qui te permettra de récupérer un script avec les 45 requêtes.
mankinder
Messages postés18Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention28 septembre 2012 30 juin 2007 à 13:23
Merci Coq pour cette précision,
mon problème vient surtout du fait, que je ne connais pas à l'avance, quels champs, contiennent la donnée en question,
donc je ne peux définir le nom du champ dans ma requête,
je cherche la ligne de code qui va parcourir toutes les colonnes, en étudier le contenu et la vider automatiquement, si son contenu = 'Stagiaire'
mankinder
Messages postés18Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention28 septembre 2012 30 juin 2007 à 14:46
Comme suit :
Nom de la table : EMPLOYES Nb de champ : 45 mais dans mon exemple, je n'en citerai que 6
Champ 1 : id Un numéro auto-incrémenté. Champ 2 : Pascal Contient le statut de l'employé, soit Interimaire, soit Stagiaire et dans son cas la valeur contenue est : Interimaire. Champ 3 : Laurence
Contient le statut de l'employé, soit Interimaire, soit Stagiaire et dans son cas la valeur contenue est : Interimaire. Champ 4 : Benoit
Contient le statut de l'employé, soit Interimaire, soit Stagiaire et dans son cas la valeur contenue est : Interimaire. Champ 5 :Valérie
Contient le statut de l'employé, soit Interimaire, soit Stagiaire et dans son cas la valeur contenue est : Stagiaire. Champ 6 : Eric
Contient le statut de l'employé, soit Interimaire, soit Stagiaire et dans son cas la valeur contenue est : Interimaire.
Je cherche un moyen pour que ma requete, vide le champ de l'employé dont le statut = Stagiaire sans préciser qu'il sagit de Valérie, c'est une information que l'on ignore, car elle varie régulierement..
Bref dire à ma requête : "Fouilles la table et purge tout les champs contenant la valeur Stagiaire."
mankinder
Messages postés18Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention28 septembre 2012 30 juin 2007 à 18:20
Héhé, non je ne me suis pas tiré dans le pied, simplement, toutes les BD ne sont pas les mêmes, parfois tu tombe sur une BD SQL facile à créer, et d'autre fois, les impératifs rendent la chose plus difficile et il faut s'adapter.
Bien entendu, les champs ne servent pas qu'a stocker l'information du statut, mais je n'ai pas jugé nécéssaire d'entrer dans les détail.
J'ai juste besoin de trouver une requête qui va parcourir toute la base de donnée et vider tout les champs ou elle rencontre la valeur 'Stagiaire'. Apparemment, çà n'est pas aussi simple que celà et je me réjouis de ce défi.
mankinder
Messages postés18Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention28 septembre 2012 30 juin 2007 à 23:37
Merci pour l'intérêt que tu à porté à mon problème.
J'ai trouvé dans tes codes, les solutions qui me manquaient et désormais tout est rentré dans l'ordre,
sans toi, je pense que j'aurais abandonné et passé à autre chose, pour éventuellement revenir plus tard sur ce problème.
1000 mercis pour cette démonstration de compétence ^^