9

尝试根据另一个字段将订单列插入某些记录。通常在 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 条记录),等等。

谢谢,克里斯

4

2 回答 2

20

试试这个代码:

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 值中的内容。

于 2013-08-01T16:21:13.513 回答
6

将变量递增与字段更新分开。

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表示用于编号的分组,即 中使用的每个字段组合都会有一个“1” PARTITION BY,它们当然会根据ORDER BY子句从 1-n 排序。

于 2013-08-01T16:21:34.667 回答