【发布时间】:2013-03-24 09:28:56
【问题描述】:
我正在尝试为那些还没有密码的行设置一个介于 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 位数字。显然,我想为每一行设置一个不同的密码。
谁能帮我看看我错过了什么?
【问题讨论】:
-
rand() 每个查询仅评估一次,例如
select rand(), somefield from sometable将始终为每一行返回相同的 rand 值。您必须执行类似select rand(id + time())之类的操作,以强制为每一行添加一个新种子。 -
有没有办法做我想做的事?
-
如果你能接受字母和数字,我有一个建议。