日期:2014-05-16  浏览次数:20563 次

【求看】数据类型的转换导致 datetime 值越界!!!存储过程
ALTER PROC SP_RCL
@SDATE VARCHAR(10)
AS
SET @SDATE=CONVERT(VARCHAR(7),CONVERT(DATETIME,@SDATE+'-01'),120)

SELECT CONVERT(VARCHAR(10),CONVERT(DATETIME,RQ),120)'SDATE',BC,ZBDD,ZKYQ,ZKSJ,BZ1,ZT1,SBD_MET,SBD_CNT,[SBD_P+],G_PAD,G_Q,[P+ET],CNT_ET,G_Q2,BZ2,ZT2,[P+ANL],RTA,FOX,BZ3,ZT3,ZM,BM,PM_ET,BZ4,ZT4,JBL,TLL,BZ5,ZT5,SBD_RK,MOS_RK,ZT6 FROM RCL
WHERE  CONVERT(VARCHAR(7),RQ,120)=@SDATE

GO
--------------------------------运行下面的
SP_RCL'2014-03-17'
-------------------------------得出提示

服务器: 消息 242,级别 16,状态 3,过程 SP_RCL,行 4
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。

(所影响的行数为 0 行)

请问这个是哪里的问题啊?怎么修改呢?烦请指教!!!
------解决方案--------------------
这句 有问题把:

SET @SDATE=CONVERT(VARCHAR(7),CONVERT(DATETIME,@SDATE+'-01'),120)

修改成这样试试;

SET @SDATE=CONVERT(VARCHAR(7),cast(@SDATE as datetime),120)
------解决方案--------------------
试试:
SET @SDATE = CONVERT(VARCHAR(7), cast( @SDATE + '-01' AS VARCHAR), 120)

SELECT  CONVERT(VARCHAR(10), RQ, 120) 'SDATE' ,
        BC ,
        ZBDD ,
        ZKYQ ,
        ZKSJ ,
        BZ1 ,
        ZT1 ,
        SBD_MET ,
        SBD_CNT ,
        [SBD_P+] ,
        G_PAD ,
        G_Q ,
        [P+ET] ,
        CNT_ET ,
        G_Q2 ,
        BZ2 ,
        ZT2 ,
        [P+ANL] ,
        RTA ,
        FOX ,
        BZ3 ,
        ZT3 ,
        ZM ,
        BM ,
        PM_ET ,
        BZ4 ,
        ZT4 ,
        JBL ,
        TLL ,
        BZ5 ,
        ZT5 ,
        SBD_RK ,
        MOS_RK ,
        ZT6
FROM    RCL
WHERE   CONVERT(VARCHAR(7), RQ, 120) = @SDATE

------解决方案--------------------
或者更加简单的:

SET @SDATE=left(@SDATE,7)