如何更新订单

时间:2013-07-25 11:19:15

标签: sql tsql

这是我的表:

ID    int (Primary Key)
Name
Order 

我正在尝试向上/向下移动我的行。所以我想更新Order字段。

UPDATE Technology 
SET Order = Order + 1 
WHERE ID = 2;

4 个答案:

答案 0 :(得分:1)

我猜你的列名order有问题。 order是一个关键字,因此您无法直接使用它。试试这个:

Update Technology set [Order]=[Order]+1 Where ID=2

试试这个:

update menu
set [order]=m2.[order]+1
from menu  
join menu m2 on menu.[Order]= m2.[Order]-1

答案 1 :(得分:1)

好的,假设你想在两个项目之间进行交换操作,你可以改变SET子句中的逻辑。

--table setup
CREATE TABLE #Technology
(
 Id int,
  [Order] int,
  Name varchar(10)

)

INSERT INTO
    #Technology
    (
        Id,
        [Order],
        Name
    )
VALUES
    (1, 1, 'Menu1'),
    (2, 2, 'Menu2'),
    (0, 0, 'Menu0'),
    (3, 3, 'Menu3')

--proof of original order
SELECT
    *
FROM
    #Technology

UPDATE
    #Technology
SET
    [Order] =
    (
        SELECT
            [Order]
        FROM
            #Technology T1
        WHERE
            Id IN (1, 2)
            AND #Technology.Id <> T1.Id -- get the order of the *other* item in the pair
    ) -- this subquery works because we only have two ids do work with
WHERE
    Id IN (1, 2)

--new order
SELECT
    *
FROM
    #Technology
<德尔> 为了确保获得订单已经大于ID 2订单的所有行,您将需要一个不同的where子句。

更新技术     SET [订单] = [订单] + 1     在哪里[订单]&gt; =     (         选择[订购]         从技术         WHERE ID = 2     )

这将确保没有重复的排序(如果已经不存在)。

答案 2 :(得分:0)

因为您只更新了一条记录,即ID = 2的记录,显然它将具有与(我假设)ID = 3的记录相同的order个数字。

可能 想要为所有ID增加所有order个数字。那么您的表格中不会有重复的订单号。为此,只需运行不带WHERE子句的查询。

Update Technology 
set Order=Order+1

答案 3 :(得分:0)

我认为你想要交换两个订单。我可能会使用存储过程来执行此操作

CREATE PROC swapOrders @order1 int, @order2 int
AS BEGIN
    IF NOT EXISTS (SELECT * FROM Technology WHERE order = @order1)
    OR NOT EXISTS (SELECT * FROM Technology WHERE order = @order2)
        RETURN    --if either of the orders aren't valid don't do anything. You may want to log or raise an error here
    ELSE
        UPDATE Technology
        SET order = CASE order WHEN @order1 THEN @order2 WHEN @order2 THEN @order1 ELSE order END
END

这是假设订单是唯一的