SQL插入DateTime类型列报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL插入DateTime类型列报错相关的知识,希望对你有一定的参考价值。

表定义:
CREATE TABLE A
(
ID INT,
ThisTime DATETIME
)
插入语句:
INSERT INTO A(ID,ThisTime) VALUES(1,GetDate())

结果数据库报错:Error converting data type nvarchar to datetime.

谁能解决啊?
刚才测试了一下,不好意思,问错了,上面的语句也能执行。但是换成存储过程就不行了:
CREATE PROC InsertData
@ID INT,
@ThisTime Datetime
AS
BEGIN
INSERT INTO A(ID,ThisTime) VALUES (@ID,@ThisTime)
END
执行存储过程:
EXEC InsertData 1,GetDate()
报错:
Incorrect syntax near ')'.

[补充]:使用的是MSSQL 2008,为了验证这个存储过程,我专门建了一个数据库就只存放这张表,但是仍然错误。悲剧了。。。

这个语法单写在SQL中是不会出错的,SQL插入的VALUES当中,当然可以插入函数。
我想这个INSERT INTO应该不是你原有的语句吧?如果原有就是这样,肯定不会错误。
另外还要确认一下,您使用的是SQLSERVER的数据库么?GETDATE()是SQLSERVER的函数。追问

环境都已经列出,请问大哥该怎么办啊?

追答

执行存储过程的时候,参数不能是GETDATE()这样的函数,需要定义一个变量,把函数的值放到变量中才可以。
调用存储过程的语句像下边这么写:
declare @time datetime
set @time = getdate()
EXEC InsertData @id = 1, @ThisTime = @time
另外,你贴出来的代码,好几个括号,都是汉字的括号,需要更正一下。

参考技术A value 中不能使用函数或表达式
不过这样可以
INSERT INTO A(ID,ThisTime) select 1,GetDate()
参考技术B 表的数据导入SQL Server 2000时,报错,导入失败;报的错为: 在目的的在SqlServer里边把表的日期字段改成datetime类型的 你导入错误后,在SqlServer追问

这位仁兄好像还有些话被Baidu给斩断了?

sql server datetime类型字段使用isnull返回1900-01-01 00:00:00.000的问题

若字段定义的类型为datetime,插入为‘‘(空),那么会默认值为1900-01-01 00:00:00.000

解决方法查询的时候过滤下cast(nullif(‘‘,‘‘) as datetime) 

技术分享图片
select cast(‘‘ as datetime)
    , cast(nullif(‘‘,‘‘) as datetime)
    , isnull(cast(nullif(‘‘,‘‘) as datetime),getdate())
View Code

 

以上是关于SQL插入DateTime类型列报错的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server datetime类型转换超出范围的报错

PreparedStatement怎么插入 datetime类型

mysql插入datetime类型字段

excel数据导入SQL SERVER 2000 时间列报错 导入失败

如何将当前日期和时间插入到具有 DateTime 类型列的 SQL Server 表中?

pymysql插入datetime类型