SQL SERVER 2008数据插入错误

时间:2014-11-19 09:28:32

标签: sql sql-server-2008 date

CREATE TABLE GroovyExps_Tgt
      (EMPNO                SMALLINT,
       FIRSTNAME            VARCHAR(20) NOT NULL,
       MIDINIT              CHAR(1) NOT NULL,
       LASTNAME             VARCHAR(15)  NOT NULL,
       SALARY_INT           INT,
       SALARY_Decimal       DECIMAL,
       SALARY_Numeric       NUMERIC,
       SALARY_FLOAT         FLOAT(9), 
       SALARY_MONEY         MONEY,
       SALARY_SMALLMONEY    SMALLMONEY,        
       BIRTHDATE            DATETIME,       
       HIREDATE_DATETIME    DATETIME,
       JOIN_TIME            TIME,
       JOINTIME             DATETIME) 


insert into GroovyExps_Tgt 
values(000010, 'CHRISTINE', 'I', 'HAAS', 52750, 52750.45, 52750.45000045, 52750.45454, 
       52750, 52750, '1980-08-22', '2014-08-22 10:00:00.000000', '16:00', '2014-08-22 10:00:00.000000')

错误:

  

Msg 241,Level 16,State 1,Line 1
  从字符串转换日期和/或时间时转换失败。

如何成功将数据插入此表?

4 个答案:

答案 0 :(得分:1)

您错过了试图在BIRTHDATE列下插入的数据的时间部分。

如果您没有该值的时间部分,请尝试插入'1980-08-22 00:00:00.00'而不是1980-08-22,因为datetime数据类型需要日期和时间值。

答案 1 :(得分:1)

尝试添加 3 零。它会起作用..

insert into TempGroovyExps_Tgt values(
000010,'CHRISTINE','I','HAAS',52750,52750.45,52750.45000045,
52750.45454,52750,52750,'1980-08-22','2014-08-22 10:00:00.000',
'16:00','2014-08-22 10:00:00.000')

答案 2 :(得分:0)

MS SQL Server支持Datetime最多1000毫秒。这些查询将解释问题:

select CAST('2014-08-22 10:00:00.000000' as datetime)
select CAST('2014-08-22 10:00:00.000' as datetime)

答案 3 :(得分:0)

试试这个:

insert into GroovyExps_Tgt values(000010,'CHRISTINE','I','HAAS',52750,52750.45,52750.45000045,52750.45454,52750,52750,'1980-08-22 10:00:00','2014-08-22 10:00:00','16:00','2014-08-22 10:00:00')

BIRTHDATE 列中将'1980-08-22'替换为'1980-08-22 10:00:00'。这意味着您试图在日期时间数据类型中插入带有前导零(.000000)的日期

<强>更新 是的你是对的,但它应该是有道理的。

可能原因是价值中的前导.000000零,例如&#39; 2014-08-22 10:00:00.000000&#39;,只需将其忽略为&#39; 2014- 08-22 10:00:00&#39;。