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 :

Conversion de varchar en int [2014]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 38
    Points : 42
    Points
    42
    Par défaut Conversion de varchar en int
    slt tout le monde!
    quelqu'un peut m'aider ? je reçois toujours la même message :Conversion failed when converting the varchar value 'Marketing' to data type int. pourtant j'ai déjà utilisé convert varchar. je sais plus quoi faire.
    merci d'avance

    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
    use bdd_bon_de_commande 
    if exists ( Select name from sysObjects Where name = 'nom_service_mois' and type = 'FN')
    	drop function nom_service_mois
    go
     
    create Function dbo.nom_service_mois(@mois int)returns int as
    begin
    declare c_datemois cursor for select month(date_bc),nom_service from bon_de_commande ,servicee where bon_de_commande.code_service = servicee.code_servicee and month(date_bc) like @mois
    declare @nom_service varchar(20)
    open c_datemois
    fetch next from c_datemois into @nom_service,@mois
    	while @@FETCH_STATUS = 0
    		begin
    			set @mois = convert(varchar(10),@nom_service) 
    			fetch next from c_datemois into @mois,@nom_service
    		end
    return @mois
    end
    go
     
    declare @mois int
    set @mois = 3
    set @mois = dbo.nom_service_mois (@mois)
     
    Print 'Total Mois = ' +  convert (varchar(20),@mois)

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Vous essayez de mettre un varchar dans un INT :

    Citation Envoyé par carterjr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set @mois = convert(varchar(10),@nom_service)

    Forcément, ça ne fonctionne pas !

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 38
    Points : 42
    Points
    42
    Par défaut
    j'ai déjà essayer mais il m'affiche la même erreur :'(

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    qu'avez vous essayé ???

    J'ai simplement reposté votre code, uniquement la ligne qui provoque l'erreur pour vous la situer.

    Mais comme je ne vois pas ce que vous essayez de faire, je vous laisse corriger.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 38
    Points : 42
    Points
    42
    Par défaut
    je doit afficher le 'nom service de la table servicee' par filtre 'mois de la table bon de commande'
    pour le mois 3 il doit afficher 'marketing'
    Conversion failed when converting the varchar value 'Marketing' to data type int.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Avez-vous affichez votre @nom_service pour être sûr que c'est un nombre ?
    Entre nous, je ne sais pas ce que fait votre fonction, je ne comprends rien, mais votre variable @mois sert à beaucoup de chose...

  7. #7
    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
    Outre le fait que spécifier un curseur, qui plus est dans une fonction scalaire, sera terriblement contre-performant, la source de votre problème est que vous avez écrit :

    fetch next from c_datemois into @nom_service,@mois

    Or, votre curseur est spécifié comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    declare c_datemois cursor for 
    select month(date_bc),nom_service
    Donc l'instruction FETCH n'est pas en phase avec le DECLARE, puisque les types, et peut-être même les valeurs ne correspondent pas.

    Vous pouvez simplifier la première instruction de votre lot par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF OBJECTPROPERTYEX(OBJECT_ID('dbo.nom_service_mois'), 'IsScalarFunction') = 1
    	DROP FUNCTION dbo.nom_service_mois
    GO
    Dans quel but souhaitez-vous utiliser ce curseur ?

    Notez que SQL est un langage déclaratif : on exprime donc le résultat que l'on souhaite obtenir, pas la façon dont on souhaite l'obtenir comme dans de nombreux autres langages.
    En cela, l'utilisation et même la présence des curseurs avec un moteur de gestion de bases de données relationnelles et un non-sens.

    @++

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 38
    Points : 42
    Points
    42
    Par défaut
    désolé mais j'ai du mal a expliquer

    table bon_de_commande
    code_bcc type int
    date_bc type date
    code_service type int

    table service
    code_service type int
    nom_service type varchar
    responsable type varchar
    les deux table sont en relation par le code_servicee

    ce que je voulais faire c'est afficher le nom_service de la table servicee qui correspond au mois choisit dans la table bon_de_commande

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Alors une simple requête suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT nom_service 
    FROM  table service s
    INNER JOIN table bon_de_commande  c
        ON c.code_service  = s.code_service 
    WHERE MONTH(date_bc) = @Mois

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

Discussions similaires

  1. conversion d'un varchar en int pour incrémentation
    Par Nikimizi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2014, 15h19
  2. [Debutant] conversion de char en int
    Par Marc_3 dans le forum Langage
    Réponses: 9
    Dernier message: 31/08/2011, 12h02
  3. [C++] Conversion de String en int
    Par poporiding dans le forum Framework .NET
    Réponses: 2
    Dernier message: 02/01/2006, 16h43
  4. Conversion de varchar en float possible ?
    Par toyyo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 17h05
  5. Conversion VARCHAR vers INT
    Par Slash dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/05/2005, 10h43

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