用sql server生成随机数
我想把table1表中的number1字段中所有的值改成1000-9999之间的随机数,可以用SQL语句实现吗?(可能有几百条记录)所有的值不要重复,重复两三值没有关系。...
我想把table1表中的number1字段中所有的值改成1000-9999之间的随机数,可以用SQL语句实现吗?(可能有几百条记录)
所有的值不要重复,重复两三值没有关系。 展开
所有的值不要重复,重复两三值没有关系。 展开
3个回答
展开全部
--创建视图
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
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
展开全部
好了..
------------------------------
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() 类型
------------
应该没问题了
------------------------------
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() 类型
------------
应该没问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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。
定义:
返回从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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询