带计数器的 SQL 更新表

use*_*463 0 sql

我正在尝试使用下一个数字更新表中的列。

这是一个例子:

表格1

User1    100
User2    101
User3    102
User4    NULL
User5    NULL
User6    NULL
Run Code Online (Sandbox Code Playgroud)

我需要它去

User1  100
User2  101
User3  102
User4  103
User5  104
User6  105
Run Code Online (Sandbox Code Playgroud)

我尝试过一些事情,例如:

update Table1
set EmpID = MAX(empid)+1
where UserName = null
Run Code Online (Sandbox Code Playgroud)

但这只会将所有空值设置为 103。

All*_*sen 5

如果使用MS SQL Server,那么您可以做的一个技巧是您可以更新一行并在同一个 go 中设置变量,然后重用更新的变量。

为了说明这一点,请考虑以下几点:

DECLARE @NextID INT
SET @NextID = 102

UPDATE Table1
 SET @NextID = EmpID = @NextID + 1
WHERE EmpID IS NULL
Run Code Online (Sandbox Code Playgroud)

这将初始值设置为@NextId。您可以按照适合您的逻辑的方式填充它。
然后,它对 Table1 运行更新,并将 @NextId + 1 分配给 EmpID,作为更新的第一行,在本例中为 103。
然后,@NextId 将更新为刚刚用于分配给 EmpId 的值 - 再次为 103。依此类推,因此后续行将获得 104,然后是 105,依此类推。

这种一次性更新变量和行值的方法非常有用,并且只需对您的特定问题进行一些修改,它就应该适用。