sql中使用存储过程得到随机数

CREATE PROCEDURE [dbo].[usp_RandomNumber]  
(  
@Len INT = 1, --随机数位数  
@Rows INT = 1, --随机笔数  
@SuiJiShu nvarchar(50) output
)  
AS  
BEGIN    
DECLARE @L INT = 1, @R INT = 1  
WHILE @R <= @Rows  
BEGIN  
DECLARE @RN varchar(MAX) = ''  
WHILE @L <= @Len --随机产生每个随数的位数  
BEGIN  
SET @RN = @RN + CHAR(ROUND(RAND() * 9 + 48,0))  
SET @L = @L + 1  
END 

 --加入时间 例如:20170120:
Select @RN=CONVERT(varchar(100), GETDATE(), 112)+@RN  
 
--如果产生相同的随机数,将不会存储
declare @c int
set @c=0
while @c=0
begin  


IF NOT EXISTS(select OrderNum from huo.CaiGouDingDan WITH(NOLOCK) where OrderNum= @RN)  -- 可根据自己的表判断随机数是否重复
BEGIN  
set @SuiJiShu=@RN
set @c=1
SET @R = @R + 1 --记录总共产生了几笔随机数  
SET @L = 1 -- 每产生完一个随机数之后,将随机数的位数初始化为1 
END
end  
END  


END  




GO


调用方法:

declare @OrderNum nvarchar(50)--订单号
exec usp_RandomNumber 6,1,@OrderNum output



你可能感兴趣的:(sql常用功能和代码)