问一个关于随机函数的问题。。。。。
这个是我才看到的一段函数产生随机数
--自定义函数:取得指定上下限的随机数
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_rand]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_rand]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_rand]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[v_rand]
GO
--需要这样一个视图
create view v_rand as select re=rand(),re2=replace(cast(newid() as varchar(36)),'-','')
go
--自定义函数:取得指定上下限长度的随字符串
create function f_rand(
@最小 int, --最小长度(范围1-32)
@最大 int --最大长度(范围1-32)
)returns int
as
begin
declare @r varchar(32)
select @r=left(re2,re*(@最大-@最小)+@最小) from v_rand
return(@r)
end
go
--调用示例
declare @i int,@u varchar(10),@p varchar(10)
set @i=0
while @i<'10000'
begin
select @u=dbo.f_rand(2,10),@p=dbo.f_rand(2,10)
if not exists(select 1 from test where id=@u)
begin
insert into test(id,name) values(@u,@p)
set @i=@i+1
end
end
但是报一个错误
服务器: 消息 245,级别 16,状态 1,过程 f_rand,行 12
将 varchar 值 'AFC506' 转换为数据类型为 int 的列时发生语法错误。
应该怎么修改呢?
还有这个算法是什么呢?能告诉我这个菜鸟吗?