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 :

Problème de variable dans la clause WHERE avec CONVERT + DATE


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 30
    Points
    30
    Par défaut Problème de variable dans la clause WHERE avec CONVERT + DATE
    Bonjour et meilleurs voeux à toute l'équipe.

    Je vous sollicite car j'ai un gros pb de variable dans une clause where:
    En fait voici l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @VAR as numeric(8,0)
    Set @VAR= Convert(Numeric(8,0),CONVERT(CHAR(8), GETDATE(),112));
     
    Select * from  [GPSPCM].[GPS].[COMMERCI22].[SHWPALP] where SWDTDC = @VAR
    Et voici l'erreur
    Msg*7399, Niveau*16, État*1, Ligne*4
    Le fournisseur OLE DB "MSDASQL" du serveur lié "GPSPCM" a rapporté une erreur. Le fournisseur rapporte une défaillance catastrophique inattendue.
    Msg*7320, Niveau*16, État*2, Ligne*4
    Impossible d'exécuter la requête "SELECT "Tbl1002"."SWNPAL" "Col1006","Tbl1002"."SWMCU" "Col1007","Tbl1002"."SWNCAM" "Col1008","Tbl1002"."SWCLI" "Col1009","Tbl1002"."SWDELS" "Col1010","Tbl1002"."SWDTDC" "Col1011","Tbl1002"."SWHRDC" "Col1012","Tbl1002"."SWDTFC" "Col1013","Tbl1002"."SWHRFC" "Col1014","Tbl1002"."SWPRFL" "Col1015","Tbl1002"."SWPRFP" "Col1016","Tbl1002"."SWDTDP" "Col1017","Tbl1002"."SWHRDP" "Col1018","Tbl1002"."SWNBCC" "Col1019","Tbl1002"."SWNBCT" "Col1020","Tbl1002"."SWTYPC" "Col1021","Tbl1002"."SWNBCD" "Col1022","Tbl1002"."SWNBLT" "Col1004" FROM "GPS"."COMMERCI22"."SHWPALP" "Tbl1002" WHERE "Tbl1002"."SWDTDC"=?" sur le fournisseur OLE DB "MSDASQL" du serveur lié "GPSPCM".

    Pourtant quand je fais ceci, l'instruction fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from  [GPSPCM].[GPS].[COMMERCI22].[SHWPALP] where SWDTDC = 20150109
    '20150109' est le resultat de cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print Convert(Numeric(8,0),CONVERT(CHAR(8), GETDATE(),112))
    Evidemment, je ne comprends pas mon erreur et ca me rends dingue.

    Pouvez vous m'aider svp?

    Merci d'avance.
    Et bonne année à tous

  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,

    Est-ce que SHWPALP est une vue ?

    Quel est le type de SGBDR pour GPSPCM ?

    qu'est-ce que ça donne avec une variable de type INT plutôt que NUMERIC (pourquoi numeric d'ailleurs ?)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    En fait, GPSPCM est un serveur lié vers un serveur AS400.
    SHWPALP est une table de l'AS400
    Le type est numéric car j'ai réalisé un Create table avec le serveur lié. Donc, le type de données est directement copié à l'identique! J'ai fais ceci car j'utilise la commande Merge pour copier la table SHWPALP du serveur AS400 vers mon serveur SQL.
    J'utilise la requête ci dessus pour gagner en performance avec la clause where (inutile de copier les valeurs d'une date antérieure).
    Cette requête est utilisée en "as source" dans ma commande merge.


    Sinon je peux peut être faire autrement pour gagner en performance (avec MERGE)?

    EDIT: Désolé, je ne peux pas tester avec INT car je suis en vac aujourd'hui. Je reviens vers vous dans 1 semaine.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Est-ce que comme ça, ça passe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select * 
    from  [GPSPCM].[GPS].[COMMERCI22].[SHWPALP] 
    where SWDTDC = Convert(INT,CONVERT(CHAR(8), GETDATE(),112))

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Je ne peux pas tester en ce moment.
    J'essayerai plus tard.
    Merci

Discussions similaires

  1. [MySQL] Introduire une variable dans la clause where
    Par ledisciple dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/08/2009, 12h39
  2. variables dans la clause where
    Par ledisciple dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/08/2009, 15h17
  3. Réponses: 7
    Dernier message: 28/04/2009, 23h26
  4. Variable d'une clause where avec quote
    Par kcizth dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/04/2008, 15h43
  5. [DAO]Recordset et Problème de cotes dans la clause where
    Par fabiolous dans le forum VBA Access
    Réponses: 31
    Dernier message: 20/04/2007, 16h46

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