我需要增加计数器并更新我的数据库表中的行,但由于某些原因它没有增加。 谁能看出这个 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
最佳答案
您的问题不是 @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));
关于sql - T-SQL 变量计数器不递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432243/