"Fehler beim konvertieren von Datentyp varchar in datetime"
Wie kann ich die lösen den Fehler in der folgenden Prozedur?
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
Ausführen als:
execute cards 'S001',50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,'28/1/2013'
gibt die folgende Fehlermeldung:
Msg 8114, Level 16, State 5, Procedure cards, Line 0
Error converting data type varchar to datetime
- Beim posten von code bitte markieren Sie es und trifft die
{}
- Taste, um es lesbar und schalten Sie das syntax-highlighting.
Du musst angemeldet sein, um einen Kommentar abzugeben.
'28/1/2013'
ist ein umstrittenes format - SQL-Server möglicherweise so interpretierendd/mm/yyyy
oder alsmm/dd/yyyy
. In diesem Fall, es geschieht das letztere, und nicht weiß, was die 28. Monat des Jahres ist.Verwenden
'20130128'
statt. Dies ist immer interpretiert alsyyyymmdd
.Hatte den gleichen Fehler. In meinem Fall war es vorbei datetime2-Werts in einen datetime-Spalte:
Ändern musste Zeichenfolge datetime (3-stellig) statt 7 Ziffern für Millisekunden:
Zu:
vielleicht versuchen Sie, durch verändern der Eingangs-variable für @EntryDate varchar.
Dann, wenn Sie es weiter nach unten, führen Sie ein CONVERT(datetime,@EntryDate) auf.
Wie pro Ihre Fehlermeldung
problem is with the date format
. Formatieren Sie Ihre Datum zuISO format (yyyymmdd)
vor der Ausführung wie unten.select convert(varchar, dateadd(day,-3,getdate()),112)
und Antworten mit den Ergebnissen?ISO format
funktioniert auf jedem sql-server. wenn Sie versuchenselect convert(datetime,'20130128')
bestätigen Sie dass. Diese Fehlermeldung ist beiline 4
und Ihre OP Fehlermeldung beiline 1
was bedeutet, dass der Fehler woanders ist. Stellen Sie sicher, dass Ihr Datumyyyymmdd
- format. ie; JAHR(4-stellig)MONAT(2-stellig)TAG(2-stellig)Procedure trgcards_return
und es warProcedure cards
vor.Wäre datetime Konvertierung 103 (TT/mm/JJJJ):
Ref: http://www.sqlusa.com/bestpractices/datetimeconversion/