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

Développement SQL Server Discussion :

[ProcStoc] Ne trouve pas la façon de faire


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut [ProcStoc] Ne trouve pas la façon de faire
    Bonjour,

    j'aurais besoin d'aide pour analyser cet algorithme (pour que ce soit plus simple à comprendre, enfin j'espère ) que je vous soumet car les différentes manières que j'ai tenté d'utiliser n'ont pas fonctionnées...

    Cet algorithme se situe dans la partie WHERE d'une procédure stockée sous SQL Server 2005.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SI @param1 DIFFÉRENT DE 0 ALORS
        SI @param2 ÉGAL 0 ALORS
    	[colonne] ÉGAL 200 OU 201
        SINON [colonne] ÉGAL 200 OU 201 OU 202
        FIN SI
    SINON
        SI @param2 ÉGAL 0 ALORS
    	[colonne] ÉGAL @param1
        SINON [colonne] ÉGAL @param1 OU 202
        FIN SI
    FIN SI
    J'espère que vous pourrez m'aider vu que nous n'avons pas d'expert en Transact-SQL ici...
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SI @param1 DIFFÉRENT DE 0 ALORS
        SI @param2 ÉGAL 0 ALORS
    	[colonne] ÉGAL 200 OU 201
        SINON [colonne] ÉGAL 200 OU 201 OU 202
        FIN SI
    SINON
        SI @param2 ÉGAL 0 ALORS
    	[colonne] ÉGAL @param1
        SINON [colonne] ÉGAL @param1 OU 202
        FIN SI
    FIN SI
    Ce n'est pas du transac-SQL, c'est un algorithme écrit "symboliquement".
    Tel quel, en SQL ou T-SQL, ça ne doit pas donner grand chose!!!

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 34
    Points : 42
    Points
    42
    Par défaut
    Hello,
    Je ne mettrais pas cet algo dans "la partie WHERE d'une procédure stockée" mais plutot dans la partie SELECT d'une requete. Pour cela tu devras utiliser l'instruction CASE de SQL Server. Plus d'info sur
    http://msdn.microsoft.com/fr-fr/library/ms181765.aspx

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok c'est un algo à traduire en T-sql...
    Bonne chance pour mettre dans l'algo cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SINON [colonne] ÉGAL 200 OU 201 OU 202
    On laisse la bd chosir la valeur?

  5. #5
    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
    Sauf si c'est effectivement une clause WHERE comme dit dans la question...
    ce qui donnerai quelque chose du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE
    @Param1 != 0 AND (
                 [Colonne] IN (200,201) OR (@Param2!=0 AND [Colonne] = 202) )OR 
          @Param1 = 0 AND ( [colonne] = @Param1 
    OR (@Param2 != 0 AND [colonne] = 202))

    a tester quand meme, et peut etre a optimiser...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses,

    j'avais déjà essayé la méthode par CASE hier mais sans succès...
    Cependant, je viens de m'apercevoir qu'il doit y avoir une erreur de syntaxe dans ma PS. Ci-dessous le code :

    Je ne crois pas que le séparateur à utiliser soit bien |

    [Colonne] =
    CASE @param1
    WHEN 0 THEN
    CASE @param2
    WHEN 0 THEN (200|201)
    ELSE (200|201|202)
    END
    ELSE
    CASE @param2
    WHEN 0 THEN (@param1)
    ELSE (@param1|202)
    END
    END
    Je cherche cette réponse en parallèles.

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Comme vous l'a dit 7gyY9w1ZY6ySRgPeaefZ, vous ne pouvez pas laisser décider à la procédure stockée la valeur que va prendre votre colonne : 200 OR 201 OR ...

    L'opérateur | permet d'effectuer des calculs en binaire.

    Dites-nous plus précisément ce que vous souhaitez faire et dans quelle situation vous vous trouvez, et donnez le code complet de votre procédure.
    Sans cela il sera difficile de vous aider.

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2007, 08h45
  2. trouve pas comment faire un algo pour mon programme
    Par unknoweb dans le forum Débuter avec Java
    Réponses: 21
    Dernier message: 12/04/2007, 17h17
  3. [TP]trouve pas le graph.tpu
    Par kaygee dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/06/2003, 12h49
  4. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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