关于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 @   木头侠  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示