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 :

Appel de procédure stockée avec variable sans @-> pas d'erreur!!


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut Appel de procédure stockée avec variable sans @-> pas d'erreur!!
    Bonjour,
    Je souhaite comprendre ce que fait cet appel incorrect à une procédure stockée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EXECUTE  [dbo].[UPD_ASF_FORECASTS_CONTREPARTIE]    @pIn_process_id  ,@pIn_Upload_Number  ,pIn_Year
    					,@pInScenario_min,@pInScenario_max, @vRepartition_niveau  ,@vRepartition_etape
    Alors que l'appel correct est celui là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EXECUTE  [dbo].[UPD_ASF_FORECASTS_CONTREPARTIE]    @pIn_process_id  ,@pIn_Upload_Number  ,@pIn_Year
    					,@pInScenario_min,@pInScenario_max, @vRepartition_niveau  ,@vRepartition_etape
    La différence entre les deux est l'oubli dans @ avant un nom de variable dans l'appel incorrect
    Voilà le Prototype de la fonction appelé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
     
    create PROCEDURE [dbo].[UPD_ASF_FORECASTS_CONTREPARTIE] 
    	@pIn_process_id int,
    	@pIn_Upload_Number nvarchar(20),
    	@pIn_Year nvarchar(4),	
    	@pInScenario_min int,
    	@pInScenario_max int,
     
    	@pIN_repartition_niveau char(1) , 
    	@pIN_repartition_etape nvarchar(10)  
    AS
    BEGIN
    -- INSERT ...
    --SELECT..
    		WHERE 
    			FR.Year=@pIn_Year
     
    END
    J'ai cherché longtemps pourquoi je n'avais pas de données insérées alors que j'aurai dû.
    Pourquoi l'appel incorrect passe t-il à la compilation de la procédure stockée, et comment se comporte-t-il?
    [edit]Version de SQL Server 2005[/edit]
    A+
    Soazig

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    ReBonjour,
    Je viens de faire l'essai suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create PROCEDURE [dbo].[ESSAI] 
    	@pIn_Year  nvarchar(4)
    as
    begin
    	Select @pIn_Year
    end
     
    declare pIn_Year nvarchar(4)
    exec [ESSAI] pIn_Year
    Et j'obtiens
    pIn_

    (1*ligne(s) affectée(s))
    On dirait qu'il me transforme pIn_Year en 'pIn_Year'.
    Mais je préférerais grandement qu'il m'envoie un message d'erreur pour que je rajoute les quotes.

    Si vous avez des explications, des ruses, l'option d'installation qu'il faut cocher pour que sQL server soit moins permissif , j'accepte toutes les remarques.
    A+
    soazig

  3. #3
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonsoir,

    En TSQL les variables sont précédées d'un @

    Pourquoi voulez vous aller contre ça ?

    Il est normal que vous ayez une erreur

    Un code qui fonctionnerait serait le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    declare @pIn_Year nvarchar(4)
    SET @pInYear = 'valeur'
    exec ESSAI @pIn_Year
    ++

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Je suis d'accord qu'en TSQL les variables sont précédées d'un @
    Mais le problème c'est que je n'ai pas d'erreur. Dans le cas réel, j'avais 10 procédures stockées qui s'appelaient les une les autres, et à un moment, j'ai oublié le @, toutes mes procédures stockées, se compilaient, s'exécutaient, sauf que bien évidemment la valeur de la variable @pIn_Year n'est pas 'pIn_Year', et donc je n'obtenais pas le résultat souhaité.

    Ma question est donc pourquoi je n'ai eu aucun message d'erreur. Y a-til une option pour rendre SQL server moins permissif? du genre option Explicit de VB ou Option Strict on pour VB.NET.

    J'espère qu'une telle option existe, car je me connais, il est possible que j'oublie à nouveau ce sacré @. En général ce genre d'étourderie ne passe pas à la compil.
    A+
    soazig

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Par défaut
    Citation Envoyé par soazig Voir le message
    Ma question est donc pourquoi je n'ai eu aucun message d'erreur. Y a-til une option pour rendre SQL server moins permissif? du genre option Explicit de VB ou Option Strict on pour VB.NET.

    J'espère qu'une telle option existe, car je me connais, il est possible que j'oublie à nouveau ce sacré @. En général ce genre d'étourderie ne passe pas à la compil.
    A+
    Non, ça n'existe pas.
    De toute façon il y a plein d'aberrations dans SQL Server.
    Bienvenu au club.

  6. #6
    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 : 43
    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
    De toute façon il y a plein d'aberrations dans SQL Server.
    Excepté celle que décrit soazig, dont je doute fortement, citez-nous les autres.
    (Non je ne travaille pas pour MS : quand un produit est bon, je le dis; quand c'est un produit médiocre, je le dis aussi).

Discussions similaires

  1. Appel de procédure stockée avec ADO.Net
    Par adilobrf dans le forum Développement Windows
    Réponses: 1
    Dernier message: 26/02/2013, 09h48
  2. Procédure stockée avec order by variable
    Par Le-Cortex dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2007, 15h20
  3. Procédure stockée avec une variable "OUT"
    Par Cpas2latarte dans le forum SQL
    Réponses: 5
    Dernier message: 13/03/2007, 10h22
  4. Appel d'une procédure stockée avec un curseur
    Par lapanne dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/12/2006, 16h24
  5. Procédure stockée avec variable en clause FROM
    Par Richard MORRISSEY dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/11/2006, 16h00

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