原文出处:http://www.erya.cn/archives/200707/153.html

在目前正在带的项目中,有一个功能需要在数据库中随机产生一个字符串作为密码(在触发器中)。于是想到了写一个函数,但是结果却提示:在函数内的 'rand' 中对带副作用的或依赖于时间的运算符的使用无效。
    在网上查资料后得知,从SQL Server 2000以后,SQL Server的函数中不可以调用返回值不确定的函数。比如rand。变态的MS。于是想到用存储过程替代。存储过程如下:
IF OBJECT_ID ('RandomStr','P') IS NOT NULL
   DROP proc RandomStr
go
create proc RandomStr
 @RandomStr varchar(6) output
as
BEGIN
 declare @s varchar(60)  
 declare @r varchar(6)  
 declare @pos int
 declare @len int
 set @s = 'acdefhijkmnpqrstuvwxyABCDEFGHJKMNPQRSTUVWXY345678'  
 set @len = len(@s);
 set @r = ''  
   
 while len(@r) < 6  
 begin  
  set @pos = cast(rand()*100 as int);
  while @pos > @len or @pos <1
  begin
   if(@pos < 1)
    set @pos = cast(rand()*100 as int);
   else
    set @pos = cast(@pos /2 as int);
  end
  set @r = @r + substring(@s, @pos, 1)
 end  
 set @RandomStr = @r
END
    如下调用即可:
    declare @r varchar(6)
    exec RandomStr @r output

相关文章:

  • 2021-06-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-30
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案