要做到這一點,你的表需要有一個唯一的標識符,要能夠
Couch 2
和
區分
Pillow 2
創建你的訂單表像這樣
CREATE TABLE [dbo].[Orders](
[ID] [int] NOT NULL,
[Item] [varchar](50) NOT NULL,
[Number] [int] NOT NULL,
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED
(
[ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
填充一次,你有這樣的(注意我是如何把隨機的唯一idenitifiers的唯一密鑰ID):
ID Item Number
593 Chair 1
207 Pillow 2
681 Bed 3
117 Couch 4
你改變沙發的數量爲2:
ID Item Number
593 Chair 1
207 Pillow 2
681 Bed 3
117 Couch 2
我們可以使用ID來區分沙發和枕頭,兩者都有號碼2。該ROW_NUMBER()函數爲我們提供了所需的編號:
SELECT
id, Item, number, ROW_NUMBER() OVER(ORDER BY number)
FROM
Orders
給
593 Chair 1 1
117 Couch 2 2
207 Pillow 2 3
681 Bed 3 4
然後只需用這些新的數字更新,使用的問題WITH子句:
WITH NewOrders(newnum, id) AS (
SELECT
ROW_NUMBER() OVER(ORDER BY number), id
FROM
Orders
)
UPDATE
Orders
SET
number = (
SELECT
newnum
FROM
NewOrders
WHERE
neworders.id = orders.id
)
結果:
ID Item Number
593 Chair 1
117 Couch 2
207 Pillow 3
681 Bed 4
你的邏輯似乎並不完整。當用戶更改爲2時,適用於重置所有其他產品的邏輯是什麼?重置標準? – InSane 2010-11-24 08:05:03
你寫*什麼是最有效的邏輯* - 但也*優化不是一個巨大的關注*。那麼,在這種情況下,*高效*意味着什麼? – 2010-11-24 08:08:01