用sql server生成随机数

2024-12-31 13:10:22
推荐回答(3个)
回答1:

--创建视图
create view myview as select re=rand()

--自定义函数:取得指定范围的随机数
create function mydata(
@a int,
@b int)
returns decimal(38,0)
as
begin
declare @r decimal(38,0)
select @r=cast(re*(@b-@a)+@a as decimal(38,0)) from myview
return(@r)
end
go

--调用(可以随意指定你要的数据范围)
select user_no,dbo.mydata(1000,9999) number from table1

--可以在你原来的查询基础上增加一列number,如不增加列,
--那就把上面的结果放入一个临时表 #a,然后update
--如:
update table1 set number1=a.number from #a a,table1 b where a.user_no=b.user_no

回答2:

好了..

------------------------------
create view v_RAND
as
select re=stuff(rand(),1,2,'')
go

create function f_RANDBH(@BHLen int)
returns varchar(50)
as
begin
declare @r varchar(50)
if not(isnull(@BHLen,0) between 1 and 50)
set @BHLen=10

lb_bh:
select @r=re from v_RAND
while len(@r)<@BHLen
select @r=@r+re from v_RAND
set @r=left(@r,@BHLen)

if exists(select * from '表名' with(xlock,paglock) where number1=@r)
goto lb_bh

return(@r)
end
go
-----------------
准备工作好了

你的number1的默认值设为:dbo.f_RANDBH(4) 这个根据你需要设随机数个数 char() 类型

------------
应该没问题了

回答3:

rand()
定义:
返回从0到1之间的随机浮点值。
举例说明:
select
rand() as 随机数
结果如图:
select
cast( floor(rand()*n) as
int )
--方法1
结果:20
select
cast(
ceiling(rand()*n)
as
int
)
--方法2
结果:43
大致一看,这两种方法没什么区别,区别就是他们的生成随机数的范围:
方法1的数字范围:0至n-1之间,如cast(
floor(rand()*100)
as
int)就会生成0至99之间任一整数
方法2的数字范围:1至n之间,如cast(ceiling(rand()
*
100)
as
int)就会生成1至100之间任一整数
比较
ceiling

floor
ceiling
函数返回大于或等于所给数字表达式的最小整数。floor
函数返回小于或等于所给数字表达式的最大整数。
  例如,对于数字表达式
12.9273,ceiling
将返回
13,floor
将返回
12。