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

MS SQL Server Discussion :

Passage de parametre calculé


Sujet :

MS SQL Server

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut [resolu]Passage de parametre calculé
    Bonjour,
    Je n'ai pas trouvé la syntaxe pour passer un paramètre calculé à une procédure. Prenons un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create procedure toto(@par1 int)
    as
    select @par1
    go
    Ce que j'essaye de faire c'est toto @monint+1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @monint int
    set @monint=10
    execute toto @par=(@monint-1)
    Si je fais cela j'ai le message Ligne 3 : syntaxe incorrecte vers '('.
    Si je fais avec les même declarations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute toto @par=@monint-1
    j'obtiens le message Ligne 3 : syntaxe incorrecte vers '-'.
    Si je fais tout simplement
    J'obtiens Ligne 3 : syntaxe incorrecte vers '-'.

    Y a t'il possibilité de faire cela , et avec quelle syntaxe?
    J'ai regardé l'aide en ligne et j'ai l'impression que ce n'est pas possible, mais cela me surprend.

    Merci de votre aide,
    A+
    Soazig

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Fais ton calcul avant l'appel de la proc, ou alors utilises le execute, mais c'est bien lourd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @monint int 
    set @monint=9
    execute toto @par=@monint
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    En attente de confirmation mail
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 58
    Points
    58
    Par défaut Re: Passage de parametre calculé
    Citation Envoyé par soazig
    Bonjour,
    Je n'ai pas trouvé la syntaxe pour passer un paramètre calculé à une procédure. Prenons un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create procedure toto(@par1 int)
    as
    select @par1
    go
    Ce que j'essaye de faire c'est toto @monint+1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @monint int
    set @monint=10
    execute toto @par=(@monint-1)
    Si je fais cela j'ai le message Ligne 3 : syntaxe incorrecte vers '('.
    Si je fais avec les même declarations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute toto @par=@monint-1
    j'obtiens le message Ligne 3 : syntaxe incorrecte vers '-'.
    Si je fais tout simplement
    J'obtiens Ligne 3 : syntaxe incorrecte vers '-'.

    Y a t'il possibilité de faire cela , et avec quelle syntaxe?
    J'ai regardé l'aide en ligne et j'ai l'impression que ce n'est pas possible, mais cela me surprend.

    Merci de votre aide,
    A+
    Soazig
    Tu peux transformer ta procédure en fonction ? Je sais qu'avec les fonctions on peut faire ce type de manip

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Ouais, mais bonjours les perfs par la suite...
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Snif,
    c'est ce que je pensais, il va me falloir déclarer une variable de plus pour passer le paramètre avec la bonne valeur, que c'est lourd!!.
    Si je comprends bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare @monint int 
    declare @monpar int
    set @monint=10 
    set @monpar =@monint-1
    execute toto @monint
    Je vous rassure ma procédure est autrement plus compliqué, et je ne veux pas modifier la valeur de ma variable de départ.
    J'avais espéré que c'était seulement un problème de syntaxe.
    Pour mr_qno
    Non je ne peux pas utiliser une fonction, j'utilise GetDate dans ma procédure.

    A+
    Soazig

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    P'tite erreur dans ton script. Tu passes le mauvais argument.

    execute toto @monpar
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  7. #7
    En attente de confirmation mail
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par soazig
    Snif,
    c'est ce que je pensais, il va me falloir déclarer une variable de plus pour passer le paramètre avec la bonne valeur, que c'est lourd!!.
    Si je comprends bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare @monint int 
    declare @monpar int
    set @monint=10 
    set @monpar =@monint-1
    execute toto @monint
    Je vous rassure ma procédure est autrement plus compliqué, et je ne veux pas modifier la valeur de ma variable de départ.
    J'avais espéré que c'était seulement un problème de syntaxe.
    Pour mr_qno
    Non je ne peux pas utiliser une fonction, j'utilise GetDate dans ma procédure.

    A+
    Soazig
    Une petite astuce pour tout de même utiliser GetDate() dans une fonction : rajouter un paramètre datetime dans les arguments et lancer la fonction avec getdate() pour valeur du paramètre.

  8. #8
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par mr_qno
    Une petite astuce pour tout de même utiliser GetDate() dans une fonction : rajouter un paramètre datetime dans les arguments et lancer la fonction avec getdate() pour valeur du paramètre.
    je vois pas très bien ce que ca apporte au post en question
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bien sûr je me suis trompée de variable, c'est bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare @monint int 
    declare @monpar int 
    set @monint=10 
    set @monpar =@monint-1 
    execute toto monpar
    Mais ça allourdi vraiement.
    PS sur la vrai procédure je ne me suis pas trompée de variable
    PPS je vais mettre résolu dans le titre même si la solution est lourde.
    A+
    Soazig

  10. #10
    En attente de confirmation mail
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par fadace
    Citation Envoyé par mr_qno
    Une petite astuce pour tout de même utiliser GetDate() dans une fonction : rajouter un paramètre datetime dans les arguments et lancer la fonction avec getdate() pour valeur du paramètre.
    je vois pas très bien ce que ca apporte au post en question
    Il veut lancer une procédure en faisant une petite opération sur le paramètre en même temps, mais ça n'est possible qu'avec les fonctions.

    Il ne peut pas la transformer en fonction car il veut utiliser Getdate() qui est une procédure, et il n'est pas possible de lancer une fonction indéterministe depuis une fonction.

    Par contre on peut ajouter un argument supplémentaire dans l'en-tête de la fonction qui sera de type datetime, et lors de l'appel de la fonction on met getdate() pour valeur et ça c'est accepté (et on peut donc avoir facilement la date courante dans une fonction).

  11. #11
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    - getdate() est une prodedure : Je croyais justement que c'étais une fonction
    - et je vois tjs pas le lien entre un champ calculé de type int - 1 et un getdate(). Ou as-t-il dit qu'il voulait utiliser getdate() ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    D'abord c'est pas il, c'est elle
    Je l'ai dit dans mon deuxième post.
    Non je ne peux pas utiliser une fonction, j'utilise GetDate dans ma procédure.
    Grossièrement cela veut dire que dans ma vrai procédure toto qui s'appelle autrement, j'emploie un GetDate(), donc que cette procédure ne peut pas être transformé en fonction.

    Cela dit, en plus de ne pas pouvoir, je ne le veux pas.
    A+
    Soazig

  13. #13
    En attente de confirmation mail
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par fadace
    - getdate() est une prodedure : Je croyais justement que c'étais une fonction
    Pardon j'ai oublié d'éditer mon message, getdate() est effectivement une fonction, mais c'est une fonction indéterministe (deux appels successifs de la fonction donne un résultat différent) et sql server interdit d'appeler ce type de fonctions depuis une fonction classique. D'où l'astuce de la lancer par le biais d'un paramètre.

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

Discussions similaires

  1. DOS passage de parametre à un .bat
    Par malbaladejo dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 26/11/2014, 15h44
  2. Passage de parametre
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 23/03/2004, 17h01
  3. [langage] Passage de parametre lors de l execution
    Par WetzlarMan dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2004, 13h28
  4. Probleme de passage de parametre a un TQuery
    Par gve21 dans le forum C++Builder
    Réponses: 7
    Dernier message: 15/01/2004, 15h49
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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