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 :

Impossible de creer une Procédure Stockée


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut Impossible de creer une Procédure Stockée
    Bonjour,

    Je galère depuis ce matin pour creer une procedure stockée mais je n'arrive pas à trouver l'erreur l'analyseur de requete me renvoi le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Serveur : Msg 170, Niveau  15, État 1, Procédure sp_gen_relever, Ligne 67
    Ligne 67 : syntaxe incorrecte vers '@VolumePrelever'.
    Serveur : Msg 170, Niveau  15, État 1, Procédure sp_gen_relever, Ligne 69
    Ligne 69 : syntaxe incorrecte vers '@VolumePrelever'.
    Serveur : Msg 156, Niveau  15, État 1, Procédure sp_gen_relever, Ligne 150
    Syntaxe incorrecte vers le mot clé 'END'.
    Pourtant la variable @VolumePrelever semble correcte et les structure
    BEGIN et END egalement.

    Voici le code de la PS :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
     
    CREATE PROCEDURE [dbo].sp_gen_relever
    (
    @Gerer int
    )
    AS
     
    DECLARE @CodeUsager varchar(10)
    DECLARE @CodeForage varchar(10)
    DECLARE @VolumeAnnuelPrelever Float
    DECLARE @VolumePrelever Float
    DECLARE @PrevIndex Float
    DECLARE @Coeff Float
    DECLARE @UnitPrice Money
    DECLARE @PresenceCompteur INTEGER
    DECLARE @EtatCompteur INTEGER
    DECLARE @Id_Trimestre INTEGER
    DECLARE @TypeReleve char(1)
    DECLARE @ModeCalcul char(1)
    DECLARE @NumCompteur varchar(20)
    DECLARE @CodeTypeUsager varchar(5)
    DECLARE @ID INTEGER
    DECLARE @TableName varchar(50)
    DECLARE @Result INTEGER
    DECLARE @NombreForage INTEGER
     
     
     
    SELECT @Id_Trimestre=id_trimestre  FROM table_periode_rel  where current_trim=1
     
     
    BEGIN TRAN
     
    SELECT
      dbo.table_usager.code_usager,
      dbo.table_usager.volume_prel_forf,
      dbo.table_type_usager.pu_ht,
      dbo.table_usager.code_type_usager
    FROM
      dbo.table_usager
      INNER JOIN dbo.table_type_usager ON (dbo.table_usager.code_type_usager = dbo.table_type_usager
      AND  table_usager.usager_inactif=@Gerer)
     
     
    OPEN curUsager
     FETCH NEXT FROM curUsager INTO @CodeUsager,@VolumeAnnuelPrelever,@UnitPrice,
    @CodeTypeUsager
    WHILE @@FETCH_STATUS=0 --PARCOUR DE LA TABLE USAGER ET SELECT TABLE FORRAGE PAR USAGER
    BEGIN --1
     --DEBUT DU WHILE FORAGE
      DECLARE curForage CURSOR FOR
      SELECT
      COUNT(code_forage) AS nombreForage,table_forage.code_forage,
      table_forage.num_compteur,
      table_forage.presence_compteur from table_forage
      WHERE (table_forage.code_usager=@CodeUsager)
      GROUP BY code_forage,num_compteur,presence_compteur
      Open curForage
      FETCH NEXT FROM curForage INTO @nombreForage,@CodeForage,@NumCompteur,@PresenceCompteur
      WHILE @@FETCH_STATUS=0
      BEGIN --2
       IF @NumCompteur=''
        BEGIN --3
        @VolumePrelever = (@VolumeAnnuelPrelever / @nombreForage)/4
         IF @@CURSOR_ROWS=1
           @VolumePrelever = (@VolumeAnnuelPrelever/4)
        END
     
          SELECT @EtatCompteur=C.compteur_activer,@PrevIndex=C.dernier_index,@Coeff=C.coefficient,
          @ModeCalcul=C.mode_calcul FROM table_compteur C WHERE C.num_compteur=@NumCompteur
          IF @EtatCompteur=1
            --si c'est un releve depuis le compteur type C et sans VolumePrelever (0)
           BEGIN --4
           SET @TypeReleve='I'
           SET @VolumePrelever=0
           END
          ELSE
           BEGIN --5
           --si absence de compteur c'est un releve forfaitaire AVEC tYPE F
           SET @TypeReleve='F'
           SET @VolumePrelever = @VolumePrelever
           END
     
       EXEC @ID=dbo.sp_sys_key @TableName = 'table_releve'
     
       INSERT INTO dbo.table_releve
         (
          Id,
          code_usager,
          num_compteur,   -- TABLE FORAGE
    	  prev_index,     --TABLE COMPTEUR
    	  nouvel_index,
    	  volume_prelev, --TABLE USAGER
    	  type_prelev,
    	  date_releve,
    	  pu_ht,         -- TABLE TYPE_USAGER
    	  code_type_usager,
          id_fact,
          num_fact,
    	  coefficient,   --COMPTEUR
    	  calculer,
    	  facturer,
       	  id_trimestre,
          mode_calcul
         )
     
         VALUES
     
        (
         @Id,
         @CodeUsager,
         @NumCompteur,
         @PrevIndex,
         0,
         @VolumePrelever,
         @TypeReleve,
         null,
         @UnitPrice,
         @CodeTypeUsager,
         null,
         null,
         @Coeff,
         0,
         0,
         @Id_Trimestre,
         @ModeCalcul
         )
     
     
         IF (@@error!=0)
         BEGIN
            RAISERROR  20000 'SERVEUR : Traitement impossible pour l''usager '
            ROLLBACK TRAN
            RETURN(@@error)
         END
     
        FETCH NEXT FROM curForage INTO @nombreForage,@CodeForage,
      @NumCompteur,@PresenceCompteur
     END --2  ---FIN DU WHILE FORAGE
     
    CLOSE curForage
    DEALLOCATE curForage
     
     
    FETCH NEXT FROM curUsager INTO @CodeForage,@CodeUsager,@numcompteur,@PresenceCompteur,
    @CodeTypeUsager,@VolumePrelever,@UnitPrice
    END -- WHILE @@FETCH_STATUS=0 (1)
     
    CLOSE curUsager
    DEALLOCATE curUsager
    COMMIT TRAN
    Je vous remercie de m'aider à trouver l'erreur je galère vraiment.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 141
    Points : 176
    Points
    176
    Par défaut
    Ne faut-il pas un BEGIN en debut de SP (après le mot clé AS) et un END en fin de SP ?

    Pour la variable @VolumePrelever, ne faut-il pas inclure le mot clé SET quand on lui assigne une valeur?

  3. #3
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    je te remercie fabrice en effect il manquait les SET et le BEGIN/END
    avec en plus la jointure n'etait pas correctement faite que je viens de corriger
    Merci et Bon week
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 141
    Points : 176
    Points
    176
    Par défaut
    C'est avec plaisir

    N'oubliez pas de mettre ce poste en "résolu".

    A+

  5. #5
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    ah oui pardon
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2014, 17h26
  2. 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
  3. Impossible de créer une procédure stockée sur MySQL: 5.0.38
    Par donbrico dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/11/2008, 18h30
  4. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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