T-SQL变量计数器不递增

Ang*_*ina 2 sql t-sql sql-server

我需要增加计数器并更新我的数据库表中的行,但有些原因它没有递增.任何人都可以看到这个T-SQL有什么问题吗?

DECLARE @id INT
DECLARE @name NVARCHAR(100)
DECLARE @getid CURSOR
declare @counter int
    set @counter = 0
SET @getid = CURSOR FOR
SELECT ShipmentTrackingNumber,
       Courier
FROM   Shipping WHERE (ShipmentTrackingNumber = '')
OPEN @getid
FETCH NEXT
FROM @getid INTO @id, @name
WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE SHipping SET ShipmentTrackingNumber = 'STN00000' + cast(@counter as VARCHAR(16))
    set @counter = @counter + 1
    FETCH NEXT
    FROM @getid INTO @id, @name
END
CLOSE @getid
DEALLOCATE @getid
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 10

你的问题不是@counter没有增加.您的问题是update正在更新每次迭代中的所有行.没有where子句,所以每一行都以相同的值结束.

我怀疑你的意图是一个可更新的游标,但这不是你写的.

你真正想要的是这个更简单的版本:

with toupdate as (
      select s.*, row_number() over (order by (select null)) as seqnum
      from shipping s
      where ShipmentTrackingNumber = ''
     )
update toupdate
    set ShipmentTrackingNumber = 'STN00000' + cast(seqnum as varchar(16));
Run Code Online (Sandbox Code Playgroud)