Sql 如何更新订单
这是我的桌子:Sql 如何更新订单,sql,tsql,Sql,Tsql,这是我的桌子: ID int (Primary Key) Name Order 我正试着上移/下移我的行。所以我想更新订单字段 UPDATE Technology SET Order = Order + 1 WHERE ID = 2; 我猜您对列名顺序有问题。订单是一个关键字,因此不能直接使用它。试着这样做: Update Technology set [Order]=[Order]+1 Where ID=2 试试这个: update menu set [order]=m2.[
ID int (Primary Key)
Name
Order
我正试着上移/下移我的行。所以我想更新订单字段
UPDATE Technology
SET Order = Order + 1
WHERE ID = 2;
我猜您对列名顺序有问题。订单是一个关键字,因此不能直接使用它。试着这样做:
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
因为您只更新了一条记录,ID=2的记录,那么很明显,它的订单号将与我假设的ID=3的记录相同 对于所有ID,您可能希望增加所有订单号。这样,您的表中就不会有重复的订单号。要做到这一点,只需在不使用WHERE子句的情况下运行查询
好的,假设您想在两个项之间执行交换操作,您可以更改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子句。
更新技术
设置[订单]=[订单]+1
其中[订单]>=
选择[订单]
来自技术
其中ID=2
这将确保如果订单不存在,则不会出现重复的订单。从您的评论中,我认为您希望交换两个订单。我可能会用存储过程来实现这一点
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
这是假设顺序是唯一的您能否进一步解释您的问题并提供样本数据和预期结果。您是否希望将每行的顺序增加1?我希望更改顺序=顺序+1;没关系。但当我做这件事的时候,一个订单和另一个订单是一样的。确保订单是一个可以做加法的数据类型,即SET order=convertvarcharmax,convertint,order+1I。但有两行的顺序是相同的。我要一阶=阶+1,另一阶=阶-1column@AzadCebiyev在这种情况下,应该如何订购happens@AzadCebiyev应该增加还是减少?可能是这样的:[Order]=[Order]+ID?@AzadCebiyev您说过您有两行,其中的顺序相同。但是MenuA:Order=1和MenuB:Order=2是不一样的。@AzadCebiyev你能告诉我们你在技术方面有什么以及你期望得到什么结果吗?不。例如:MenuA:Order=1和MenuB:Order=2。当MenuB:Order=1时| | MenuA:Order=2@AzadCebiyev嗯,这会让事情变得明朗一点。。你可以在问题中添加更多关于你的问题的细节,比如什么是上下文。这将有助于我们了解问题的解决方案是什么。然后,也许我们可以提供更好的解决方案。MenuA:Order=1和MenuB:Order=2。当MenuB:Order=1时| | MenuA:Order=2@AzadCebiyev例如我实际上不知道那是什么意思。请编辑您的问题,使其更能描述您的目标。@AnonymousDownvoter:为什么?这是菜单。“我想上下移动菜单。@彼得·杰德对不起,我误解了这个问题
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