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)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |