时间戳字段犯罪

时间:2018-02-01 17:56:40

标签: sql sql-server-2008

我有一个表(带有时间戳和varbinary)

CREATE TABLE [dbo].[CASE]
(
    [CASE_ID] [int] IDENTITY(1,1) NOT NULL,
    [CASE_TITLE] [varchar](50) NOT NULL,
    [CASE_STATUS] [varchar](50) NOT NULL,
    [MODIFIED_TS] [timestamp] NOT NULL,
    [SYNCED_TS] [varbinary](8) NULL
)

然后我添加一个项目,并更新它......

UPDATE [CASE] 
SET CASE_STATUS = 'Something New' 
WHERE CASE_ID = 1

当我这样做时,我会更新Synced_TS列:

UPDATE [CASE] 
SET SYNCED_TS = MODIFIED_TS 
WHERE CASE_ID = 1

然而,当我跑这个......

SELECT 
    *, 
    CAST(CONVERT(BIGINT, MODIFIED_TS) - CONVERT(INT, SYNCED_TS) AS DECIMAL)
FROM 
    [CASE]
WHERE 
    CAST(CONVERT(BIGINT, MODIFIED_TS) - CONVERT(INT, SYNCED_TS) AS DECIMAL) > 1
    OR SYNCED_TS IS NULL

我有两个完全不同的值,例如A0D和A0A,它们是不同的,但不应该是A0D和A0C吗?

MODIFIED_TS         SYNCED_TS
---------------------------------------
0x0000000000000A0D  0x0000000000000A0A

它出现问题的原因是我试图将其转换为整数来进行比较,因此我可以确定是否需要同步记录。

0 个答案:

没有答案