Sql server手动增加订单ID

时间:2014-12-04 14:46:14

标签: c# asp.net sql-server

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**

2 个答案:

答案 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是你的表名