常用到通過兩個數字之間獲取隨機數,C#中有內置方法,數據庫中沒有。以前有找到過一個方法,是通過數據庫自定義函數實現,但是找不到了,今天自己寫了個,記錄下來備用!
代碼如下:
if
exists(
select
*
from sys.objects
where name
=
'
f_random
')
drop function f_random
go
/*
兩個數之間獲取隨機數
*/
create function f_random
(
@min_num int,
@max_num int
)
returns int
as
begin
declare @basicnumber decimal( 18, 9) -- 基數
declare @randnumber decimal( 18, 9) -- 隨機數
if @max_num <= 10
set @basicnumber = 10
else if @max_num <= 100
set @basicnumber = 100
else if @max_num <= 1000
set @basicnumber = 1000
else if @max_num <= 10000
set @basicnumber = 10000
while 1 = 1
begin
select @randnumber = randvalue from vRandom
set @randnumber = @randnumber * @basicnumber
if @randnumber >= @min_num and @randnumber < @max_num
break
else
continue
end
return cast( @randnumber as int)
end
go
drop function f_random
go
/*
兩個數之間獲取隨機數
*/
create function f_random
(
@min_num int,
@max_num int
)
returns int
as
begin
declare @basicnumber decimal( 18, 9) -- 基數
declare @randnumber decimal( 18, 9) -- 隨機數
if @max_num <= 10
set @basicnumber = 10
else if @max_num <= 100
set @basicnumber = 100
else if @max_num <= 1000
set @basicnumber = 1000
else if @max_num <= 10000
set @basicnumber = 10000
while 1 = 1
begin
select @randnumber = randvalue from vRandom
set @randnumber = @randnumber * @basicnumber
if @randnumber >= @min_num and @randnumber < @max_num
break
else
continue
end
return cast( @randnumber as int)
end
go
使用方法:
select dbo.f_random(1,100) as randnum
一定要加dbo!