0
我有一些代碼需要用戶標識和最後修改日期才能創建需要增量的序列。這並非總是如此,所以應該從這個腳本中發生的更新並不總是有效。SQL序列號失敗
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
這個錯誤是我創建序列號的方式。我們需要使用上次修改日期來了解要更新哪個記錄,但是向其添加標識並不總是會創建更大的數字。所以我有時看到更新的序列號較低,最後一個序列號存儲在配置文件中,這是程序每次運行時從哪裏開始的信息。
實例序列號
4246610134504882
4246610134504827
4246610134504805
4246610134504406 **
4246610134503828 **
4246610134502560 **
4246610134502402 **
4246610134502383 **
4246610134504422
以粗體顯示的數字會得到錯過了更新。
您可以添加'rowversion'列:https://msdn.microsoft.com/en-us/library/ms182776.aspx – Blorgbeard
與去即時通訊思想row_number() –
我不認爲這就是你想要的 - 'row_number()'只是給結果集的每一行分配一個連續的數字。如果更新的字段不是按順序排列的,則不會爲該行獲取新的數字。如果有任何更改記錄的順序(例如中間插入),所有的數字都會改變。 – Blorgbeard