“Erreur lors de la conversion du type de données varchar datetime”
Comment puis-je résoudre l'erreur dans la procédure suivante?
CREATE PROCEDURE cards
@salesman VARCHAR(10),
@RCV10 INT,
@RCV09 INT,
@RCV15 INT,
@GPRS15 INT,
@RCV20 INT,
@RCV25FTT INT,
@RCV25 INT,
@RCV31 INT,
@RCV30 INT,
@RCV35 INT,
@RCV50 INT,
@RCV55 INT,
@SIM INT,
@VTOPSIM INT,
@VTOPBAL INT,
@THREEGSIM INT,
@entrydate DATETIME
AS
BEGIN
IF EXISTS(
SELECT *
FROM CardsIssued
WHERE salesman = @salesman
AND RCV10 > @RCV10
AND RCV09 > @RCV09
AND RCV15 > @RCV15
AND GPRS15 > @GPRS15
AND RCV20 > @RCV20
AND RCV25FTT > @RCV25FTT
AND RCV25 > @RCV25
AND RCV31 > @RCV31
AND RCV30 > @RCV30
AND RCV35 > @RCV35
AND RCV50 > @RCV50
AND RCV55 > @RCV55
AND SIM > @SIM
AND VtopSim > @VTOPSIM
AND VtopBal > @VTOPBAL
AND ThreeGSim > @THREEGSIM
AND EntryDate = @entrydate
)
BEGIN
INSERT Cards_Returned
VALUES
(
@salesman,
@RCV10,
@RCV09,
@RCV15,
@GPRS15,
@RCV20,
@RCV25FTT,
@RCV25,
@RCV31,
@RCV30,
@RCV35,
@RCV50,
@RCV55,
@SIM,
@VTOPSIM,
@VTOPBAL,
@THREEGSIM,
@EntryDate
)
END
ELSE
PRINT'CARDS RETURNED CANNOT BE GREATER THAN CARDS ISSUED'
END
Exécuter en tant qu':
execute cards 'S001',50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,'28/1/2013'
donne l'erreur suivante:
Msg 8114, Level 16, State 5, Procedure cards, Line 0
Error converting data type varchar to datetime
Lors de la publication du code, merci de le souligner et de frapper la
{}
bouton pour le rendre lisible et activer la coloration syntaxique.OriginalL'auteur user1994734 | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
'28/1/2013'
est l'ambiguïté d'un format SQL Server pourrait interpréter commedd/mm/yyyy
oumm/dd/yyyy
. Dans ce cas, il est fait le dernier, et ne sait pas ce que le 28e mois de l'année.Utilisation
'20130128'
à la place. C'est toujours interprété commeyyyymmdd
.OriginalL'auteur Damien_The_Unbeliever
Eu la même erreur. Dans mon cas, c'était de passage datetime2 de la valeur à une colonne datetime:
Dû changer de chaîne de type datetime (3 chiffres) au lieu de 7 chiffres pour millisecondes:
:
OriginalL'auteur live-love
peut-être essayer de changer la variable d'entrée pour @EntryDate à un varchar.
Ensuite, lors de l'utilisation de loin, effectuer une conversion(datetime,@EntryDate).
essayez peut-être quelque chose le long des lignes de CONVERTIR(datetime,CONVERT(varchar,@EnrtyDate, 112)). Ce qui se passe que par Damien en commentaire, c'est SQL n'aime pas le format de la date...
il donne d'erreur lors de l'exécution de la procédure...
OriginalL'auteur SQLGuru
Que par votre message d'erreur,
problem is with the date format
. Format votre date àISO format (yyyymmdd)
avant l'exécution comme ci-dessous.Pouvez-vous exécuter ce
select convert(varchar, dateadd(day,-3,getdate()),112)
et répondre avec les résultats?la réponse est.... 20130128
ISO format
fonctionne sur n'importe quel sql-server. si vous essayezselect convert(datetime,'20130128')
vous confirmez que. Ce message d'erreur est àline 4
et votre OP message d'erreur est àline 1
ce qui signifie que l'erreur est ailleurs. Assurez-vous que votre date estyyyymmdd
format. ie; ANNÉE(4 chiffres), le MOIS(2 chiffres), la DATE(2 chiffres)la réponse est...2013-01-28 00:00:00.000 plz laissez-moi savoir la ligne exacte de changer,comme je suis nouveau à cela et ne pas l'obtenir correctement
OriginalL'auteur Kaf
Qui serait datetime conversion 103 (jj/mm/aaaa):
Ref: http://www.sqlusa.com/bestpractices/datetimeconversion/
OriginalL'auteur Audor