2015-02-08 131 views
0

我有一個SQL Server 2008 R2應用程序需要創建一個唯一的序列號,每天重新啓動1。所以表中有一個使用Julian日期和序列號的複合主鍵。我將有一個存儲過程來查找下一個序列號 - 如何保證兩個用戶不會獲得相同的編號?每天生成唯一的序列號

這是行不通的?

INSERT INTO tbl_test (sn1, sn2) 
VALUES (1, (SELECT isnull(max(sn2) + 1,1) 
      FROM tbl_test 
      WHERE sn1 = 1)) 

什麼是最好的方式來測試代碼,以驗證它會正常工作?

回答

2

爲什麼你需要一個每天重新啓動的ID?你可以在需要時隨時計算它:

select t.*, 
     row_number() over (partition by cast(CreatedAt as date) order by id) as DayId 
from table t; 

如果你確實想要保證,我建議你使用一個序列。但是,唉,您正在使用SQL Server 2008,因此您無法訪問它。否則,請使用觸發器。

我不認爲你的方法適用於兩個用戶在「完全」同時發出請求。

+1

序列號必須每天重新開始,因爲一堆賺得比我多的人會這樣說。推動這一決定不是一種選擇。你能解釋一下觸發器如何解決問題嗎?謝謝。 – JPoole 2015-02-08 16:37:37