关于SQLserver中timestamp字段与datetime转换溢出的原由与解决办法

在做系统数据同步时,ERP厂商会在某个表单中设定timestamp的时间戳的字段。当数据在更改时,timestamp字段会进行自动更新。

查看时间戳的语句为:SELECT @@dbts 

特别注意:有些时候timestamp可能进行转换成datetime ,SQL语句为:select cast(timestamp_field as datetime) as timestamp_field from yourtable 

但有时同样的语句时查询执行后会报:将 expression 转换为数据类型 datetime 时出现算术溢出错误

别慌,切记timestamp与datetime 没有必然的联系。为什么有的可以有可不行。取决于SELECT @@dbts 的增识值,因为数据库@@dbts已超过datetime的显示转换了。

那对于同步我们咱办?把timestamp转换为bigint就可以记录最后一次数据表修订的值了。

SELECT 
,CAST( timestamp_field AS VARBINARY(8)) AS 'timestamp转十六进制字符串'
,CONVERT(BIGINT,timestamp_field) AS 'timestamp转bigint'
FROM yourtable

更新前先调上次同步的timestamp的bigint值,然后本次更新大于上次timestamp的值就可以了。

如上次同步timestamp的bigint的值为9766538220,本次再同步是同步大于9766538220就可以了。

最郁闷的是ERP厂家在删除时记录都没有了,SAP的是逻辑删除好些!

posted @ 2024-12-21 18:54  木头侠  阅读(10)  评论(0编辑  收藏  举报