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 :

Procedure Stockée - Autoriser Variable vide


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Points : 70
    Points
    70
    Par défaut Procedure Stockée - Autoriser Variable vide
    Bonjour,
    Voila je voudrais que ma procedure stockée utilise soit la premiere variable soit la deuxieme ou les deux.
    Il faut que la machine accepte qu'un des parametres soit non renseigné
    Si je coche la case "NULL" je n'ai pas de reponse car ce champ n'est pas "NULL" il y a toujours une infos dedans.
    Voici le code :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    create procedure RechMontantFournisseur (@NumFournisseur as varchar(20),@Montant as decimal(38,20))
    as
    begin
    select
    	t1.[Entry No_] as "N° Séquence",
    	Convert(char(10),t1.[Posting Date],103) as "Date Comptabilisation",
    	t1.[Vendor No_]as "N° Fournisseur",
    	t1.[Description] as "Nom Fournisseur",
    		Case
    			when t1.[Document Type]='0' then ' '
    			when t1.[Document Type]='1' then 'Paiement'
    			when t1.[Document Type]='2' then 'Facture'
    			when t1.[Document Type]='3' then 'Avoir'
    			when t1.[Document Type]='4' then 'Intérêts'
    			when t1.[Document Type]='5' then 'Relance'
    			when t1.[Document Type]='6' then 'Remboursement'
    		end 
    		as "Type Document",
    	t1.[Document No_] as "N° Document",
    	t1.[Open] as Ouvert,
    	t1.[External Document No_] as "N° Doc Externe",
    	t2.Amount as "Montant TTC",
    	t1.[Lettrage],
    	t1.[Lettré par],
    	t1.[Lettré le],
    	convert(char(10),t1.[Date fin lettrage],103) as "Date fin lettrage",
    	convert(char(10),t1.[Date debut lettrage],103) as "Date debut lettrage"
    from 
    	dbo.[BASE$Vendor Ledger Entry] as T1
    		inner join
    			dbo.[BASE$Detailed Vendor Ledg_ Entry] as T2
    			on t1.[Entry No_] = t2.[Vendor Ledger Entry No_]
    Where
    	t1.[Vendor No_] = @NumFournisseur
    	and t2.Amount = @Montant
     
    order by t1.[Vendor No_]
    end
    Merci pour votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    salut,
    il faut que tu ajoute la chose suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE procedure RechMontantFournisseur (@NumFournisseur AS varchar(20)='toto',@Montant AS decimal(38,20)=-123)
    en fait si ta premiere variable n'est pas renseignée elle aura la valeur 'toto' si la seconde n'est pas renseignée elle aura la valeur -123

    j'ai fait le test suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE procedure RechMontantFournisseur (@NumFournisseur AS varchar(20)='toto',@Montant AS decimal(38,20)=-123)
    AS
    begin
    SELECT @NumFournisseur,@Montant
     
    end
    pour lancer la proc stock comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    exec RechMontantFournisseur 
    exec RechMontantFournisseur 'coucou'
    exec RechMontantFournisseur 'tutu',51.6
    exec RechMontantFournisseur '',99.6
    exec RechMontantFournisseur @Montant=987.65
    en effet le petit probleme se pose quand on ne veut renseigner que la deuxieme variable, on doit mettre le nom de la variable ou renseigner la premiere variable soit avec 'toto' pour faire comme si elle n'était pas renseigné soit mettre rien '' .
    J'espere que ça t'aideras

  3. #3
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    excuse moi je viens de revoir ta requete et j'ai oublié de te rajouter un truc tu dois mettre une clause if dans ta procedure stockée pour tester les valeurs de tes variable et modifier ta requete en fonction du style si on a pas renseigné une de tes variable ne pas l'inclure dans ta requete ...
    désolé

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Merci loutheo,
    le probleme c'est qu'on est obligé de mettre une valeur alors ?
    le soucis c'est pour le montant, car je peux avoir des montants = 0
    avec un numero de fournisseur !
    j'aurai voulu avoir une option comme :
    si num fournisseur est pas renseigné
    alors regarder le montant.

    si c'est possible bien sur !

  5. #5
    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,

    Dans ce cas testez la valeur du montant dès le début de la procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF @montant = 0 
    BEGIN
    ...
    END
    Vous pouvez positionner votre paramètre à NULL :

    IF @montant IS NULL
    BEGIN
    ...
    END
    Cela me paraît plus propre car NULL signifie réellement que le paramètre n'a pas été valué

    @++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Bonjour elsuket,

    J'ai modifié mon code avec un OR a la place de AND
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Where
    	t1.[Vendor No_] = @NumFournisseur
    	or t2.Amount = @Montant
    et depuis ca marche je peux mettre "vide" ou "null" ou rien et j'ai les bonnes reponses.
    Mais je garde ton exemple sous le coude au cas ou une erreur survienne.

    Merci pour votre aide

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

Discussions similaires

  1. Procedure stockée et variables locales
    Par Shogun dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/11/2007, 01h13
  2. Procedure stocke - Probleme variable
    Par Veovis dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/09/2006, 11h09
  3. Réponses: 5
    Dernier message: 13/07/2006, 10h11
  4. Réponses: 3
    Dernier message: 12/07/2006, 15h56

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