我有一些代码使用用户ID和上次修改日期来创建需要增量的序列。情况并非总是如此,因此应该从此脚本发生的更新并不总是有效。
DECLARE @SequenceNumber BIGINT
SET @SequenceNumber = 0
SELECT
[Student_ID] as IDCode,
[Last_modified] as LastModified,
CONVERT(BIGINT, CONVERT(VARCHAR(MAX), CAST(FLOOR(CAST([Last_modified] AS FLOAT)) AS BIGINT) * 1000000 + DATEPART(hour, [Last_modified]) * 10000 + DATEPART(minute, [Last_modified]) * 100 + DATEPART(second,[Last_modified])) + CONVERT(VARCHAR(MAX), RIGHT('00000' + RTRIM([Student_ID]), 5))) AS SequenceNumber
FROM
[CardDB].[dbo].[Card]
WHERE
convert(bigint,convert(varchar(max),cast(floor(cast([Last_modified] as float)) as bigint)*1000000 + DATEPART(hour,[Last_modified]) * 10000 + DATEPART(minute,[Last_modified]) * 100 + DATEPART(second,[Last_modified]))+convert(varchar(max), RIGHT('00000'+ rtrim([Student_ID]),5))) > @SequenceNumber
ORDER by
SequenceNumber ASC
错误是我创建序列号的方式。我们需要使用上次修改日期来知道要更新哪条记录,但是为此添加id并不总是会创建更大的数字。所以我有时看到的是序列号较低的更新,最后的序列号存储在配置文件中,这是程序用来知道每次运行时从哪里开始的。
序列号示例
4246610134504882
4246610134504827
4246610134504805
4246610134504406 **
4246610134503828 **
4246610134502560 **
4246610134502402 **
4246610134502383 **
4246610134504422
以粗体显示的数字将错过更新。
答案 0 :(得分:0)
你可以
http://weblogs.sqlteam.com/peterl/archive/2010/12/15/the-internal-storage-of-a-datetime2-value.aspx