SQL Server:使用变量增加INT列

时间:2013-08-01 16:17:44

标签: sql sql-server

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

谢谢,克里斯

2 个答案:

答案 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条款。