id name order
1 a 102
2 b 103
3 c 104
4 d 105
5 e 106
6 f 107
7 g 108
8 h 109
9 i 110
上面显示的是“按订单排序ASC” column id是主键,自动递增1 列名是varchar colum order是一个int
我想更新指定行的订单号。 例如,我想将id 9移动到第一个订单(102),并希望更改所有其他ID的订单号。
有没有办法在ms sql中以编程方式执行?
这是我网站的产品页面。 我想订购我想要的产品....
编辑:抱歉这是我第一次,我想解释一下。首先,为了删除主键,我不想更改主键。 我只是想改变他们的订单ID,在上面的示例中,我想将“id = 9”的“顺序”更改为102,然后其他人需要从103,104,105等跟进。
结果将是......
id name order
9 i **102**
1 a **103**
2 b **104**
3 c **105**
4 d **106**
5 e **107**
6 f **108**
7 g **109**
8 h **110**
答案 0 :(得分:3)
我认为你不应该弄乱一行的id(主键)。它应该是不可变的
如果您需要自定义排序,则添加新列
就足够了ALTER TABLE dbo.MYTABLENAME ADD
Sort int NOT NULL CONSTRAINT DF_tmp_Sort DEFAULT 0
GO
所以你可以按它排序并随意改变
问题编辑后更新:
好的,我现在了解你的要求:
SELECT *
FROM dbo.MYTABLENAME
ORDER BY CASE WHEN ID = 9 THEN 0
ELSE ID END ASC
进一步(希望最后)更新
你只需要2个简单的更新:
UPDATE dbo.MYTABLENAME SET order=order+1 WHERE order>=102;
UPDATE dbo.MYTABLENAME SET order=102 WHERE id=9;
答案 1 :(得分:2)
要重新调整您的数据,以便9从102开始,102之后的所有内容都更改为现在从103开始,请使用:
UPDATE SomeTable SET [Order] = [Order] + 1 WHERE [Order] >= 102;
UPDATE SomeTable SET [Order] = 102 WHERE ID = 9
SomeTable是你的表名