【问题标题】:how to restore `timestamp` value in Sybase ASE 15.5?如何在 Sybase ASE 15.5 中恢复“时间戳”值?
【发布时间】:2016-08-13 05:15:31
【问题描述】:

我是reading data 来自Sybase ASE 15.5 databaseinserting 的一个表,data 回到另一个目标Sybase ASE 15.5 database。所有sourcedestination 数据匹配而不是timestamp 列。

据我所知,timestamp 列会自动更新:

每次插入或更新包含时间戳列的行时, 时间戳列会自动更新。一个表只能有 时间戳数据类型的一列。名为时间戳的列将 自动拥有系统数据类型时间戳。

来源:https://www.aquaclusters.com/app/home/project/public/aquadatastudio/wikibook/Sybase-ASE-3/page/4/Data-Types

因此,当我将 timestamp 数据恢复到目标数据库时,它与实际数据不匹配。

这里是源表的简短屏幕

这是目标表的短屏幕

如何恢复时间戳列的准确值?

仅供参考:

我正在使用Apache Meta-model 从源表中查询数据并将该数据恢复回目标数据库。 As you can see timestamp is an array of bytes so I am extracting data as an array of bytes and restore it again as array of bytes but the value timestamp column is being changed when restore

【问题讨论】:

    标签: java timestamp sap-ase apache-metamodel


    【解决方案1】:

    你不能。时间戳列将始终更新;这些列包含的这个值是“数据库时间戳”,它是 ASE 中事务机制的基础,并且随着每个插入或更新的行或数据库中的任何其他更改而递增。 然而,“时间戳”这个名称具有误导性,因为它与现实世界的时间完全无关。它只是一个 6 字节的计数器,只会在数据库的生命周期内增加。

    如果您想要这些列中的真实时间,请改用数据类型“日期时间”或“大日期时间”。

    【讨论】:

    • 批量复制可以在时间戳列中插入任何有效值。批量复制 API 并非在所有编程环境中都可用;事实上,在极少数情况下,可能只有在 C 语言中使用本机 CT-lib Open Client。替代方法是使用 bcp 实用程序。这仅在批处理过程中很少执行时才可行,因为使用 bcp 需要在每次 bcp 执行时创建一个文件。 bcp 看起来不适合在线申请。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多