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 :

Utilisation variable dans procédure SQL SERVEUR


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut Utilisation variable dans procédure SQL SERVEUR
    Bonjour,

    Je souhaite créer une procédure dans Sql server management studio avec utilisation d'une variable.

    Je voudrais m'assurer que ce début de code est correct.

    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
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Auteur:		Daniel
    -- Date création : 21-06-2013
    -- Description:	Insertion notes éco contribution
    -- =============================================
     
    ALTER PROCEDURE NotesEcoContribution 
    AS
     
    SET LANGUAGE US_ENGLISH
    declare @MaxNum int
     
     
    -- Initialisation de la variable.
    SELECT @Maxnum = max(nnoid)+1 from notes;
     
    print @Maxnum
     
    INSERT INTO NOTES ( NNOID, ANOOBJECT, DNODATCR, DNODATDE, ANOAUTEUR, ANOTYPE, ANOTEXT1, ANOLTYP, ANOLID ) 
                    SELECT DISTINCT '@Maxnum' AS Expr1, 'Eco contribution Mobilier' AS Expr2, getdate() AS Expr3, getdate() AS Expr4, 
                    'Daniel' AS Expr5, 'Alerte' AS Expr6, 
                    'Le champ Coeff. TP1 de la fiche est égal à 0' AS Expr7, 'AR' AS Expr8, '143718' AS Expr9 
                    FROM NOTES
     
     
     
    SET ANSI_NULL_DFLT_ON ON
    SET NOCOUNT OFF
     
     
    BEGIN
    	SET NOCOUNT ON;
     
    END
    GO
    Et puis surtout comment tester la procédure, j'ai essayé de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec NotesEcoContribution
    Mais j'ai un message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*201, Niveau*16, État*4, Procédure*NotesEcoContribution, Ligne*0
    La procédure ou fonction 'NotesEcoContribution' attend le paramètre '@MaxNum', qui n'a pas été fourni.
    Pouvez-vous m'aider ?

    Merci d'avance pour votre aide.

    Daniel

  2. #2
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Je reviens vers vous, j'ai modifié ma précédure mais maintenant quand j'éxécute celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec NotesEcoContribution '@MaxNum'
    J'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*8114, Niveau*16, État*1, Procédure*NotesEcoContribution, Ligne*0
    Erreur de conversion du type de données varchar en int.
    Voici le code de la procédure:

    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
    ALTER PROCEDURE NotesEcoContribution 
    AS
    --SET LANGUAGE US_ENGLISH
    declare @MaxNum int
     
    SET ANSI_NULL_DFLT_ON ON
    SET NOCOUNT OFF
     
    -- Initialisation de la variable.
    Select @maxNum=(select max(nnoid)+1 from notes (nolock))
    Select @maxNum=coalesce(@MaxNum,0)
     
    print @MaxNum
     
    --INSERT INTO NOTES ( NNOID, ANOOBJECT, DNODATCR, DNODATDE, ANOAUTEUR, ANOTYPE, ANOTEXT1, ANOLTYP, ANOLID ) 
    --                SELECT DISTINCT '@Maxnum' AS Expr1, 'Eco contribution Mobilier' AS Expr2, getdate() AS Expr3, getdate() AS Expr4, 
    --                'Daniel' AS Expr5, 'Alerte' AS Expr6, 
    --                'Le champ Coeff. TP1 de la fiche est égal à 0' AS Expr7, 'AR' AS Expr8, '143718' AS Expr9 
    --                FROM NOTES
     
     
    SET NOCOUNT ON
    Ou se situe le problème ?

    Merci de votre aide.

    Daniel

  3. #3
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Le problème est que la procédure attend un paramètre, et l'utilise. J'imagine qu'il doit y avoir une ancienne version de votre procédure, qui utilisait cette variable (en essayant de la convertir en int quelque part ?). Il n'est pas impossible que cette (ancienne) procédure soit sur un autre schéma ou une autre database.

    Pour vérifier il faudrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM sys.all_objects
     WHERE name = 'NotesEcoContribution'
    Vérifiez notamment les dates de création et de modification ...

  4. #4
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Re,

    Merci beaucoup pour la réponse,

    Je verifie tout cela

    Daniel

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Le problème se situe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec NotesEcoContribution '@MaxNum'
    Vous passez un string à votre procédure stockée... or elle attend un int...

    Je pense que vous avez une variable @MaxNum et que vous voulez la passer à votre procédure.

    Quelques chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DECLARE @MaxNum INT
    SET @MaxNum=3
     
    exec NotesEcoContribution @MaxNum

Discussions similaires

  1. [MySQL] Introduire une variable dans requête SQL, insérer des données à la volée
    Par Ronan.f dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 29/04/2006, 22h10
  2. Variables dans un .sql exécuté par sqlplus
    Par ekke dans le forum Oracle
    Réponses: 10
    Dernier message: 12/04/2006, 17h03
  3. [XSL] impossible d'utiliser variable dans expression XPATH
    Par pierre.zelb dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/01/2006, 07h41
  4. une variable dans du SQL ??
    Par Black Pearl dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2005, 12h55
  5. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44

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