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,为了验证这个存储过程,我专门建了一个数据库就只存放这张表,但是仍然错误。悲剧了。。。
我想这个INSERT INTO应该不是你原有的语句吧?如果原有就是这样,肯定不会错误。
另外还要确认一下,您使用的是SQLSERVER的数据库么?GETDATE()是SQLSERVER的函数。追问
环境都已经列出,请问大哥该怎么办啊?
追答执行存储过程的时候,参数不能是GETDATE()这样的函数,需要定义一个变量,把函数的值放到变量中才可以。
调用存储过程的语句像下边这么写:
declare @time datetime
set @time = getdate()
EXEC InsertData @id = 1, @ThisTime = @time
另外,你贴出来的代码,好几个括号,都是汉字的括号,需要更正一下。
不过这样可以
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())
以上是关于SQL插入DateTime类型列报错的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server datetime类型转换超出范围的报错
PreparedStatement怎么插入 datetime类型
excel数据导入SQL SERVER 2000 时间列报错 导入失败