要做到这一点,你的表需要有一个唯一的标识符,要能够
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