7
votes

Erreur lors de la conversion de types de données NvarchaRar en DateTime

J'ai l'interface de procédure suivante: xxx

Lorsque je l'appelle de cette façon: xxx

i Obtenir cette erreur:

msg 8114, niveau 16, état 5
Erreur lors de la conversion de type de données Nvarchar en DateTime.


3 commentaires

Quelle valeur passez-vous au paramètre dans insertemdetails ?


20/07/2012 00:00:00 comme date et heure


Vérifiez ceci: Stackoverflow.com/Questtions/41867371/...


4 Réponses :


15
votes

Selon vos paramètres régionaux, le paramètre que vous transmettez pour @TimeItemAdded code> pourrait ne pas être reconnu.

Vous devez passer la date en tant que: p>

20120720


4 commentaires

Ce n'est pas un format sûr. Définir la langue française; Sélectionnez Convert (DateTime, '2012-07-20 00:00:00'); Données MSG 242, niveau 16, état 3, ligne 2; LA CONVERSION D'UN TYPE DE DONNÉES VARCHAR EN TYPE DE DONNées DateTime A Créé un VALEUR HORTIENS. Les formats sécurisés pour DateTime sont yyyymmdd ou AAA AAAIM-MM-DDTHH: MM: MM: MM: Ss.nnn - que t est important.


@Aaronbertrand - fascinant; enlevé le temps pour la cohérence


Toujours pas de sécurité, même sans le temps. Les tirets sont le problème. En français (et d'autres locaux), il est interprété comme AAAAYY-DD-MM . De toute évidence, il n'y a pas de 20ème mois. yyyymmdd est à l'abri de ce problème.


Intéressant; Nous avons des sites français et je jure que cela n'a jamais marché, mais je te crois.



2
votes

Utilisez un littéral de chaîne sans ambiguïté pour votre date. Dans ce cas: xxx

meilleur encore, assurez-vous de passer un paramètre fortement typé dans lequel vous savez que la date est correcte. Idéalement, cela ne devrait jamais être présenté comme une chaîne dans n'importe quel format.

Les formats régionaux tels que M / D / Y sont de mauvaises nouvelles, car vous ne pouvez pas vous assurer qu'ils fonctionnent compte tenu de la session de l'utilisateur, DateFormat, Paramètres de langue, les paramètres régionaux sur la machine, etc.


0 commentaires

0
votes

Ce lien contient tous les formats DateTime, leurs connaissances http://www.sql-server-helper.com/tips/date -Formats.aspx

Vous pouvez le transmettre en tant que varchar et le convertir explicitement en une date d'heure à l'aide du code de format de date approprié. Par exemple: P>

SELECT CONVERT(DATETIME, '20/07/2012 00:00:00', 103)


1 commentaires

Je ne suis pas d'accord que vous devriez changer le paramètre sur Varchar. Fixez le format (ou utilisez le bon type de données) le plus tôt possible. Si vous changez le paramètre en Varchar, les gens peuvent transmettre tout ce qu'ils veulent. mm / dd / aaaa va casser, par exemple; 06/07/2012 stockera simplement la mauvaise date en silence et 07/20/2012 générera une exception.



1
votes

SQL Lisez votre date comme 7/20/2012 qui n'est pas valide, vous pouvez transmettre vos objets de date avec un format plus sûr AAAAY-MM-DD par exemple: 2012-07-20


0 commentaires