IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Utilisation de variables dans une boucle de remplacement


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Utilisation de variables dans une boucle de remplacement
    Bonjour à tous,

    Dans la colonne (Settings (ntext,null)) d’une table (Misc) de ma base de données j’essaye de partout supprimer le Mois/Jour qui suit l'expression <Transfert> (remplacer par exemple <Transfert>12/1 par <Transfert>).
    "Mois" variant de 1 à 12 et "Jour" de 1 à 7, les 84 lignes de commandes SQL de ce type fonctionnent :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE Misc SET Settings = CAST(REPLACE(CAST(Settings as NVarchar(max)),'<Transfert>1/1','<Transfert>') AS NText)
    UPDATE Misc SET Settings = CAST(REPLACE(CAST(Settings as NVarchar(max)),'<Transfert>1/2','<Transfert>') AS NText)UPDATE Misc SET Settings = CAST(REPLACE(CAST(Settings as NVarchar(max)),'<Transfert>1/7','<Transfert>') AS NText)()UPDATE Misc SET Settings = CAST(REPLACE(CAST(Settings as NVarchar(max)),'<Transfert>12/1','<Transfert>') AS NText)UPDATE Misc SET Settings = CAST(REPLACE(CAST(Settings as NVarchar(max)),'<Transfert>12/7','<Transfert>') AS NText)

    Je souhaite maintenant utiliser une syntaxe plus concise par le biais de deux boucles WHILE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE @X int, @Y int
    SET @X = 1
    SET @Y = 1
    WHILE (@X <=12) BEGIN
    WHILE (@Y <=7) BEGIN
    UPDATE Misc SET Settings = CAST(REPLACE(CAST(Settings as NVarchar(max)),'<Transfert>@X/@Y','<Transfert>') AS NText)
        SET @Y = @Y + 1
    END
    SET @X = @X + 1
    SET @Y = 1
    END
    Ceci s’exécute sans erreur dans SSMSE mais les remplacements ne s’effectuent malheureusement pas.
    J’ai l’impression que la syntaxe de '<Transfert>@X/@Y' n’est pas correcte, quelqu’un peut-il m’expliquer pourquoi ?

    Merci d’avance pour vos lumières !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Dans l'expression , @X et @Y font partie de la chaîne de caractères et ne sont pas considérés comme des variables.
    '<Transfert>' || @X || '/' || @Y serait sans doute plus adapté
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Dans l'expression , @X et @Y font partie de la chaîne de caractères et ne sont pas considérés comme des variables.
    '<Transfert>' || @X || '/' || @Y serait sans doute plus adapté
    merci de m'avoir mis sur la voie

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous semblez être sous SQL Server ?!?
    Si c'est le cas, voici une autre approche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    SELECT 1
     
    WHILE @@ROWCOUNT > 0
    	WITH n(x) AS(
    		SELECT CAST(ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS VARCHAR(12))  FROM sys.objects
    	),
    	tmp(t) AS (
    		SELECT '<Transfert>' + A.x + '/' + B.x 
    		FROM n A
    		CROSS JOIN n B
    		WHERE A.x <= 12
    		AND B.x <= 7
    	)
    	UPDATE d
    	SET txt = REPLACE(txt, t, '<Transfert>')
    	FROM d
    	INNER JOIN tmp
    		ON d.txt LIKE '%' + t + '%'

Discussions similaires

  1. [XL-MAC 2011] utiliser plusieurs variables dans une boucle
    Par whispering dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2013, 20h30
  2. [VB.net] Declaration variable dans une boucle for
    Par nico10gbb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/05/2006, 11h45
  3. Réponses: 6
    Dernier message: 17/03/2006, 12h23
  4. Réponses: 3
    Dernier message: 01/09/2005, 11h56
  5. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo