尝试根据其他字段将订单列插入某些记录。通常在MySQL中不是问题,但在SQL Server中我不太明白这里的语法。
这就是我所拥有的:
DECLARE @a int
SET @a = 1
UPDATE tablename
SET order_position = @a:=@a+1
WHERE table_id = xxx
但是我的一部分认为这是一个函数/过程的路径,而不是一个命中UPDATE
查询。
很抱歉,但是我把它写成了一个MySQL数据库的人,不熟悉SQL Server的变量,所以可能有点不对。
我需要逐个在一堆记录上运行它,我希望order_position列为1-7(其中有7条记录)等等。
谢谢,克里斯
答案 0 :(得分:16)
试试这段代码:
DECLARE @a int
SET @a = 1
UPDATE tablename SET order_position = @a, @a=@a+1 WHERE table_id = xxx
你正在尝试进行双重任务,这就是问题所在。 "order_position = @a:=@a+1"
有2个解释,一个是你知道的,另一个是递增a的结果,它成功了应该在order_position值中。
答案 1 :(得分:5)
将变量递增与字段更新分开。
DECLARE @a int
SET @a = 1
UPDATE tablename
SET order_position = @a
,@a = @a + 1
WHERE table_id = xxx
来自MySQL,你可能会忽略这项任务的一个很好的工具,ROW_NUMBER()
。
您可以使用ROW_NUMBER()
为表格中的每一行分配一个数字:
SELECT *,ROW_NUMBER() OVER (PARTITION BY .... ORDER BY .... )
FROM Table
PARTITION BY
表示编号的分组,即PARTITION BY
中使用的每个字段组合都会有一个“1”,它们当然会根据1-n从1-n开始排序。 ORDER BY
条款。