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 :

If dans une procédure stockée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Par défaut If dans une procédure stockée
    Bonjour,

    J'ai une procédure stockée, je lui passe en paramètre des booléens et des varchar.

    Je souhaiterai que ma requete soit différente en fonction des booléens.

    En faite c'est une recherche de pièce avec des bouts de la ref ou des bouts de la description.

    L'utilisateur coche la case "la ref contien" et/ou la "decription contient" et il tape ce qu'il cherche dans les 2 textbox.

    J'appelle donc ma procédure stockée:

    si la checkbox ref contient est cochée et pas la checkbox la description contient alors je cherche dans....

    et ainsi de suite.

    Fonction déclenché en appuyant sur le boution rechercher dans mon form:

    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
     
    private void Bt_Rechercher_Click(object sender, EventArgs e)
            {
                if (ChxRefContient.Checked == true || ChxDescContient.Checked == true)
                {
                    SqlDataAdapter m_daDataAdapter;
                    DataTable MaDataTable = new DataTable();
                    Grid_ResultatRecherche.DataSource = null;
     
                    SqlConnection ConsultConnection = new SqlConnection(oSurveillant.strConnexion);
                    m_daDataAdapter = new SqlDataAdapter("SearchAvecRefEtNom '" + Txt_RefIntContient.Text + "', '" + Txt_NomIntContient.Text + "' ,'" + ChxRefContient.Checked + "','" + ChxDescContient.Checked + "';", ConsultConnection);
                    m_daDataAdapter.Fill(MaDataTable);
                    ConsultConnection.Close();
                    Grid_ResultatRecherche.DataSource = MaDataTable;
                }
            }
    Ma procédure stockée :

    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
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
     
    ALTER PROCEDURE [dbo].[SearchAvecRefEtNom] (@RefIntContient varchar(50),@NomIntContient varchar(50),@ChxRefContient boolean ,@ChxDescContient boolean )
    AS 
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    FROM ITEMASA  
    IF ( ChxRefContient = true AND ChxDescContient = false)
    WHERE ITNBR LIKE '%' + @RefIntContient + '%'
    END IF
    ELSE IF ( ChxRefContient = false AND ChxDescContient = true)
    WHERE ITDSC LIKE '%' + @NomIntContient + '%' ORDER BY ITNBR
    END IF
    ELSE
    WHERE ITNBR LIKE '%' + @RefIntContient + '%' AND
    ITDSC LIKE '%' + @NomIntContient + '%' ORDER BY ITNBR
    END IF
    La procédure stockée n'est pas correcte.



    Merci d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Par défaut
    Bonjour,
    Votre procédure stockée n'est pas valide car vous cherchez à construire dynamique votre requête SELECT, donc lors de la compilation de la procédure, il n'est pas possible de vérifier que votre requête est syntaxiquement correct.
    Il faut travailler sous la forme suivante:
    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
     
    IF ( ChxRefContient = true AND ChxDescContient = false)
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    FROM ITEMASA  
    WHERE ITNBR LIKE '%' + @RefIntContient + '%'
    END IF
    ELSE IF ( ChxRefContient = false AND ChxDescContient = true)
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    WHERE ITDSC LIKE '%' + @NomIntContient + '%' ORDER BY ITNBR
    END IF
    ELSE
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    WHERE ITNBR LIKE '%' + @RefIntContient + '%' AND
    ITDSC LIKE '%' + @NomIntContient + '%' ORDER BY ITNBR
    END

  3. #3
    Membre éclairé Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Par défaut
    Merci pour ta réponse.

    En fait il ne prend pas le type boolean, j'ai donc du convertir mes boolean avant d'appeller la procédure stockée.

    Voila ce que ça donne :

    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
     
    ALTER PROCEDURE [dbo].[SearchAvecRefEtNom] (@RefIntContient varchar(50),@NomIntContient varchar(50),@ChxRefContient varchar(50) ,@ChxDescContient varchar(50))
    AS 
    IF ( @ChxRefContient = 'True' AND @ChxDescContient = 'False')
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    FROM ITEMASA  
    WHERE ITNBR LIKE '%' + @RefIntContient + '%'
    ELSE IF ( @ChxRefContient = 'False' AND @ChxDescContient = 'True')
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    FROM ITEMASA 
    WHERE ITDSC LIKE '%' + @NomIntContient + '%' ORDER BY ITNBR
    ELSE
    SELECT DISTINCT ITNBR,ITDSC,ITTYP 
    FROM ITEMASA 
    WHERE ITNBR LIKE '%' + @RefIntContient + '%' AND
    ITDSC LIKE '%' + @NomIntContient + '%' ORDER BY ITNBR

  4. #4
    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 : 44
    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
    Par défaut
    Bonjour,

    Retenez quand même que cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE PROCEDURE sp_test (@toto BIT)
    AS
    BEGIN
    	SELECT @boolean
    END
    Exécutée comme suit :

    Retourne 1, parce que le moteur de base de données peut transtyper automatiquement le 'true' en BIT.

    Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST('true' AS BIT)
    SELECT CAST('false' AS BIT)
    Retourne successivement 1 puis 0.

    Mais la vraie question serait plutôt de savoir pourquoi vous passez des VARCHAR à la place de BIT ...

    @++

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Saisie de données dans une procédure stockée
    Par Hastaroth dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/10/2004, 09h54
  3. Vérification du type de données dans une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 11h20
  4. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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