【问题标题】:cast or convert varchar datatype to rowversion将 varchar 数据类型转换或转换为 rowversion
【发布时间】:2018-09-05 12:39:34
【问题描述】:

我可以使用下面的代码将表中的 rowversion 列转换为 varchar

select CONVERT(VARCHAR, CONVERT(BINARY(8), roversion_col), 1) rwa from TBL

如何将其转换回 rowversion 数据类型? 不可以吗?

更新:
这不应被视为重复 How to convert TIMESTAMP values to VARCHAR in T-SQL as SSMS does?

这个问题是关于询问 varchar 的 rowversion 数据类型。 但是,这个问题反之亦然,并且想使用 varchar 获取 rowversion 数据。

【问题讨论】:

  • 你为什么要转换它? rowversion 是没有特定意义的二进制值,除了保证它总是仅针对该特定行增加。它不是数据库版本号,也不能保证具有唯一值。较新的行保证获得比现有行更大的值
  • 此外,rowversion 字段无法写入,因此rowversion 值不能存储在数据库中的任何位置,除非是binary(8)
  • 是的,我明白了。在转换到 PostgreSQL 期间,Talend 已将 rowversion 转换为字符变化数据类型。我有最新行版本的记录,想知道最新的变化,但由于它被记录为字符变化,我无法识别最近的变化
  • 为什么不呢?如果以任何方式修改了行,则 rowversion 值也会更改。当您尝试重新加载数据时,rowversion 将与您存储的任何内容不同。您是否假设rowversion 可能是一个数据库版本,并尝试查找行版本比存储的最大版本的内容?你不能像这样使用rowversion
  • 顺便说一句,如果您想查找新条目,SQL Server 自 2005 年以来在所有版本和版本中都提供change tracking。这确实使用数据库版本号。您可以要求对任何启用了更改跟踪的表进行所有更改,包括删除。无需加载所有内容并尝试通过比较行来查找更改,您只需询问自上次提取的数据库版本以来的任何更改记录

标签: sql-server


【解决方案1】:

试试这个:

CONVERT(rowversion, CONVERT(BINARY(8), @teststring, 1))

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多