16

次の手順でエラーを解決するにはどうすればよいですか?

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

次のように実行します。

execute cards 'S001',50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,'28/1/2013'

次のエラーが発生します。

Msg 8114, Level 16, State 5, Procedure cards, Line 0
Error converting data type varchar to datetime
4

6 に答える 6

21

'28/1/2013'dd/mm/yyyyはあいまいな形式です。SQL Server は、または として解釈する可能性がありますmm/dd/yyyy。この場合は後者であり、年の 28 番目の月が何であるかを知りません。

'20130128'代わりに使用してください。これは常にと解釈されyyyymmddます。

于 2013-01-31T11:31:57.070 に答える
2

@EntryDate の入力変数を varchar に変更してみてください。次に、さらに下で使用する場合は、CONVERT(datetime,@EntryDate) を実行します。

于 2013-01-31T11:33:27.833 に答える
1

エラー メッセージのとおりproblem is with the date formatです。以下のように、日付を実行前にフォーマットISO format (yyyymmdd)します。

execute cards 'S001',50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,'20130128'
于 2013-01-31T11:32:00.663 に答える
1

これは、日時変換 103 (dd/mm/yyyy) になります。

--receive parameter as varchar <br/>
declare @dateEntry as varchar(10) <br/>
set @dateEntry= '28/1/2013' 

--do the conversion <br/>
declare @dateResult as datetime <br/>
set @dateResult = convert(datetime, @dateEntry, 103) <br/>
select @dateResult <br/>

参照: http://www.sqlusa.com/bestpractices/datetimeconversion/

于 2014-05-16T15:43:47.027 に答える