-1
votes

Date de conversion et / ou heure de la conversion de chaîne de caractères ont échoué

declare @orderwhere varchar(5000)
declare @Pdate DateTime

set @orderwhere = 'Product.ProductID = 1 And Product.ProductDate=' + @Pdate

exec('select Product.ProductID
      from Product
      where ' + @orderwhere)
I get these errors:
  Msg 241, Level 16, State 1, Line 4
  Conversion failed when converting date and/or time from character string.

2 commentaires

Ne modifiez pas la question de manière à ce que les réponses déjà données ont été stupides. Si vous avez résolu un problème et que vous en avez un autre poser plutôt de poser une nouvelle question et de supprimer probablement l'ancien.


D'accord avec @stickybit ici. La modification est complètement différente de la question initiale et peut provoquer des bowvotes inutiles.


3 Réponses :


1
votes

EDIT:

Remarque: cette réponse fait référence à la question originale qui avait une ligne Declare @pdate DateTime = '1001-01-01' et le message d'erreur "Échec de la conversion lors de la conversion de la date et / ou du temps de chaîne de caractères." en elle.


du manuel pour datetime :

Gamme de date [:] 1er janvier 1753 au 31 décembre 9999

Votre année est définitivement trop tôt pour un DateTime .

Vous pouvez essayer d'utiliser un DateTime2 , qui va du 0001-01-01 à 9999-12-31 ou juste un DATE avec la même plage que DateTime2 (concernant la partie Date, pas la partie temporelle du cours).


1 commentaires

Ils ont édité la question avec une erreur différente, pensait que ses réponses l'erreur postée originale.



0
votes

Vous devez convertir le @pdate code> en varchar pour la concaténation de la chaîne.

declare @orderwhere varchar(5000)
declare @Pdate datetime = '20160101'

set @orderwhere = 'Product.ProductID = 1 And Product.ProductDate= ''' + convert(varchar,@Pdate,120) + ''''

print('select Product.ProductID
from Product
where ' + @orderwhere)


0 commentaires

0
votes

Vous devez convertir votre @pdate en varchar xxx

et ajouter des guillemets. Essayez de tester vos requêtes dynamiques en imprimant vos résultats.


1 commentaires

Scsimon, le correctif devrait fonctionner. La réponse crée une nouvelle variable (@pdatec) et convertissant la date à un Varchar.