2010-05-27 58 views
0

說我有一個名爲「ordernum」字段的表,表示給定的一組行的順序。現在想象一下,我刪除了這些行中的一行。什麼類型的查詢最適合重新分配訂單號碼,以便它們保持順序?T-SQL重新分配訂單編號

下面是一個例子:

ID GROUP_ID名ORDERNUM活躍
-------------------------- -------------------------
0 0 ______________ _______________ '名1' __________ 5__________true
1 _______________ 0 _______________ '名稱2' __________ 4__________true
2 _______________ 0 _______________ 'NAME3' __________ 3__________true
3 _______________ 1 _______________ 'NAME4' __________ 2__________true
4 _______________ 1 _______________ 'NAME5' _________ 1__________true
5 _______________ 1 _______________ 'Name6' _________ NULL__________false

現在,如果我刪除使用id = '4' 我將如何在 'ORDERNUM' 重置值的列字段對於那個特定的組?這甚至有可能嗎?
或者如果我添加了一個新行。 (第一次創建行時,它們按日期排序,但用戶可以選擇自己設置訂單。)

在我的表格設計中,我有一個'active'布爾列。如果'active'被設置爲false,那麼'ordernum'被設置爲NULL。否則,應該給它一個訂單號。

+0

是否要求給定組的ordernum值是連續的? – 2010-05-27 23:14:26

+0

不,組ID並不重要。但所有活動的必須是順序的,因爲它們顯示在2列:1個偶數,1個奇數 – 2010-05-29 05:23:37

回答

0

你可以使用一個觸發刪除:

update tbl 
set ordernum = ordernum - 1 
from deleted d 
where d.active = 1 
and group_id = d.group_id 
and ordernum > d.ordernum 

添加一個新行應該不會有什麼大不了要麼,雖然我不一定會使用觸發器用於插入。

+0

THanks roufamatic,我會試着去看看,即使它沒有退出刪除,因爲我所做的只是設置爲false ordernum爲NULL。 週一將試一試:P – 2010-05-29 05:29:16