我正在尝试为那些还没有密码的行设置一个介于1234和9999之间的4位数密码。
我的第一次尝试使用以下代码。
begin tran
DECLARE @Lower int
DECLARE @Upper int
SET @Lower = 1234 -- Lowest password value
SET @Upper = 9999 -- Highest password value
update DestinationComparisons
set Password = ROUND(((@Upper - @Lower - 1) * RAND() + @Lower), 0)
where Password = '' or Password is null
commit tran
go
但是,这似乎为我更新的每一行提供了相同的4位数字。显然,我想为每一行添加不同的密码。
有人能帮我看看我错过了吗?
答案 0 :(得分:2)
这是一种可能性:
with toupdate as (
select dc.*,
(ROW_NUMBER() over (order by newid()) / cast(COUNT(*) over () as float)) as randnum
from DestinationComparisons dc
)
update toupdate
set Password = ROUND(((@Upper - @Lower - 1) * randum + @Lower), 0)
where Password = '' or Password is null
它使用newid()
生成随机行号,然后将其除以teh count以获得0到1之间的值。然后可以将其用于密码计算。
答案 1 :(得分:2)
begin tran
update DestinationComparisons
set Password = cast(left(cast(ABS(checksum(newid())) as varchar),4) as int)
where Password = '' or Password is null
commit tran