在insert语句上将字符串转换为datetime时出错

时间:2013-05-24 15:47:35

标签: sql tsql

我正在尝试使用Insert语句 但是我收到了一个错误

INSERT INTO Temp_Table 
            ( 
             [fromDate] 
             ,[toDate] 
             ,[IDProduct] 
             ,[IDType] 
             ,[Price] 
             ,[Art] 
            ,[active]
           ) 

    VALUES (
             CAST('2013-09-28 00:00:00' AS DATETIME) 
           , CAST('2013-10-05 00:00:00' AS DATETIME) 
           , 3453 
           ,106 
           ,0 
           ,'RUN' 
           ,'' 
          ) 

错误消息是德语。我可以尝试翻译它。

Bei der Konvertierung eines char-Datentyps in 
einen datetime-Datentyp liegt der datetime-Wert außerhalb des gültigen Bereichs. 

翻译几乎是

 By Converting a Char data type in datetime Datatype lies
 the datetime value out of valid range.

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试以语言中立的方式传递这些日期时间YYYMMDD hh:mm:ss.nnn,如下所示:

INSERT INTO Temp_Table 
            ( 
             [fromDate] 
             ,[toDate] 
             ,[IDProduct] 
             ,[IDType] 
             ,[Price] 
             ,[Art] 
            ,[active]
           ) 

    VALUES (
             '20130928 00:00:00.000'
            ,'20131005 00:00:00.000'
            , 3453 
            ,106 
            ,0 
            ,'RUN' 
            ,'' 
          );

或仅YYYYMMDD,例如2013092820131005;因为时间部分是0。

答案 1 :(得分:0)

插入DateTime时无需强制转换。只需写下'20130928 00:00:00'

即可

答案 2 :(得分:0)

听起来像是SQL注入攻击。但还有其他事情可能会出错。

服务器的区域设置可能有误。为特定区域设置配置Windows Server(以及SQL Server)时,将自动从这些设置继承日期和时间的格式。

如果区域设置与传递给服务器的数据不匹配 - 例如,如果日期作为 MM / DD / YYYY 传递,则它们应 DD / MM / YYYY 然后会出现错误。如果您尝试从日期格式冲突的来源导入数据,也会发生这种情况。