我有一个表,其中一列是SQL Server 2008数据库中的DATETIME
。正在插入的日期不是时间戳,因为在插入时使用NOW是可以接受的。在插入之前生成了一个日期,我想保留这个值。
日期时间被序列化为格式为yyyy-mm-dd hh:mm:ss.[fff...]
的字符串,然后在插入之前转换为JDBC时间戳对象。
我遇到的SQL Server问题是它在插入之前将值转换为TIMESTAMP,然后抱怨:
com.microsoft.sqlserver.jdbc.SQLServerException:
Cannot insert an explicit value into a timestamp column.
Use INSERT with a column list to exclude the timestamp column,
or insert a DEFAULT into the timestamp column.
如何在没有转换的情况下插入DATETIME列?
感谢。
答案 0 :(得分:4)
SQL Server TIMESTAMP数据类型不是类似日期的数据类型。它是服务器生成的值,用于帮助实现数据一致性。如果要存储日期时间数据,请避免使用TIMESTAMP数据类型。
因此,请勿转换为JDBC Timestamp对象。数据可以作为字符串值插入。请注意,您指定的格式是可以的,但fff...
必须是3位数,不能超过3位数的SQL Server DATETIME数据类型。
答案 1 :(得分:0)
如果列定义为TimeStamp,请参阅SQL Server联机丛书中的引用:
SQL Server时间戳数据类型具有 与时间或日期无关。 SQL 服务器时间戳是二进制数 表示相对序列 哪些数据修改发生在 一个数据库。时间戳数据类型 最初实施是为了支持 SQL Server恢复算法。
它进一步说明从不使用时间戳 键中的列,尤其是主键 键,因为时间戳值 每次行都会更改 修改。