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 :

Erreur requête simple - incompréhensible


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut Erreur requête simple - incompréhensible
    Bonjour,

    Voici mes 2 requêtes en question (la 1ère fonctionne mais pas la 2ème) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from SOCIETE1.dbo.getCA('01/02/2010','02/02/2010','11;','Oui;Non;');
    select * from SOCIETE1.dbo.getCA('01/03/2010','02/03/2010','11;','Oui;Non;');
    Message d'erreur de la 2ème requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*245, Niveau*16, État*1, Ligne*2
    Échec de la conversion de la valeur varchar '11;' en type de données int.
    Avez vous une idée ???

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Exécutez les l'une après l'autre SVP

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut
    Oui je l'ai fait et toujours pareil :S

    Par contre dans la requête qui plante (la 2ème), si je remplace '11;' par '11' elle fonctionne.
    Mais le problème (comme le montre la requête 1 qui fonctionne) ce paramètre est de type varchar, et il n'y a aucun rapport avec les dates

  4. #4
    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
    Bonjour,

    Pouvez vous poster la DDL de votre fonction getCA ?

    ++

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Software Developer
    Inscrit en
    Mars 2008
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Software Developer

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 470
    Par défaut
    Voici ma fonction getCA :
    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
    CREATE FUNCTION [dbo].[getCA]
    (	@DateDeb datetime,
    	@DateFin datetime,
    	@N_Depot varchar(50),
    	@FactCompl varchar(20)
    )
    RETURNS TABLE 
    AS
    RETURN 
    (
    	SELECT     CC.Num_Cde_Cli AS NumCde, CAST(LC.numeric2 AS numeric(6, 0)) AS NumMiss, CC.Nom_Cde AS NomCde, 
                          C.Nom_Client AS NomCli, CC.Date_Cde AS DateCde, CC.FacturationComplete AS FactComplete, ISNULL(LC.Montant_Euro, 0) AS TotHt, CC.Descriptif, 
                          D.Nom_Depot AS Depot, 
                          ISNULL(CASE WHEN M.EtatAvanc = 1 THEN 0.01 WHEN M.EtatAvanc = 2 THEN 0.01 WHEN M.EtatAvanc = 3 THEN 0.01 WHEN M.EtatAvanc = 4 THEN 0.1
                           WHEN M.EtatAvanc = 5 THEN 0.25 WHEN M.EtatAvanc = 6 THEN 0.50 WHEN M.EtatAvanc = 7 THEN 0.70 WHEN M.EtatAvanc = 8 THEN 0.80 WHEN M.EtatAvanc
                           = 9 THEN 1 END, 0) AS 'EnCoursPcent', 
                          ISNULL(CASE WHEN M.EtatAvanc = 1 THEN LC.Montant_Euro * 0.01 WHEN M.EtatAvanc = 2 THEN LC.Montant_Euro * 0.01 WHEN M.EtatAvanc = 3 THEN
                           LC.Montant_Euro * 0.01 WHEN M.EtatAvanc = 4 THEN LC.Montant_Euro * 0.1 WHEN M.EtatAvanc = 5 THEN LC.Montant_Euro * 0.25 WHEN M.EtatAvanc
                           = 6 THEN LC.Montant_Euro * 0.50 WHEN M.EtatAvanc = 7 THEN LC.Montant_Euro * 0.70 WHEN M.EtatAvanc = 8 THEN LC.Montant_Euro * 0.80 WHEN M.EtatAvanc
                           = 9 THEN LC.Montant_Euro * 1 END, 0) AS 'Valeur',
    						D.N_Depot as 'N_Depot'
    	FROM         dbo.Cde_cli AS CC INNER JOIN
    						  dbo.LIGNECLI AS LC ON CC.N_Cde_Cli = LC.N_Cde_Cli INNER JOIN
    						  dbo.DEPOT AS D ON CC.N_Depot = D.N_Depot INNER JOIN
    						  dbo.CLIENT AS C ON CC.N_Client = C.N_Client INNER JOIN
    						  RESEAU_EXPERT.dbo.MISS AS M ON cast(numeric2 as int) = cast(M.Num as varchar(10))
    	WHERE     CC.Date_Cde between @DateDeb and @DateFin
    	and CC.FacturationComplete in(select String from SOCIETE1.dbo.Split(@FactCompl,';'))
    	and D.N_Depot in(select String from SOCIETE1.dbo.Split(@N_Depot,';'))
    	and cast(numeric2 as int) in (select cast(Num_Fct_Base as varchar) from FCT_BASE)
    )
    Et ci-dessous une fonction qui est appellée dans getCA :
    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
    create function [dbo].[Split] (
    @StringToSplit varchar(2048),
    @Separator varchar(128))
    returns table as return
    with indices as
    (
    	select 0 S, 1 E
    	union all
    	select E, charindex(@Separator, @StringToSplit, E) + len(@Separator)
    	from indices
    	where E > S
    )
    select substring(@StringToSplit,S,
    case when E > len(@Separator) then e-s-len(@Separator) else len(@StringToSplit) - s + 1 end) String
    ,S StartIndex        
    from indices where S >0
    Pour résumé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM SOCIETE1.dbo.getCA('01/02/2010','02/02/2010','11;','Oui;Non;');
    => Fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM SOCIETE1.dbo.getCA('01/03/2010','02/03/2010','11;','Oui;Non;');
    => Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*245, Niveau*16, État*1, Ligne*2
    Échec de la conversion de la valeur varchar '11;' en type de données int.
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM SOCIETE1.dbo.getCA('01/03/2010','02/03/2010','11','Oui;Non;');
    => Fonctionne (idem requête précédente mais avec le ";" de "11" en moins.

    Une idée ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    A priori normal que cela ne fonctionne pas bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *
    FROM   dbo.Split('11;', ';')
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String      StartIndex
    ----------- -----------
    11          1
                4
    11 est convertissable en entier, mais la ligne suivante ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [9.3] [phppgadmin] Requête simple retourne une erreur
    Par totophe56 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/09/2015, 15h28
  2. [MySQL] Erreur requête SQL avec simple variable.
    Par Mck698 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/05/2012, 14h33
  3. [VB6] Erreur Requête
    Par yoda7666 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/01/2006, 21h20
  4. [erreur requête]
    Par viny dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/09/2005, 13h55
  5. [DEBUTANT] TSqlQuery & requête simple
    Par fred64 dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/04/2004, 11h35

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