问一个关于随机函数的问题。。。。。

jcdwin3 2004-03-23 11:44:51
这个是我才看到的一段函数产生随机数
--自定义函数:取得指定上下限的随机数

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 的列时发生语法错误。
应该怎么修改呢?
还有这个算法是什么呢?能告诉我这个菜鸟吗?
...全文
43 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoliaoyun 2004-03-23
  • 打赏
  • 举报
回复
create function f_rand(
@最小 int, --最小长度(范围1-32)
@最大 int --最大长度(范围1-32)
)returns int --关键是这里,改成 returns varchar(32)
as
begin
declare @r varchar(32)
select @r=left(re2,re*(@最大-@最小)+@最小) from v_rand
return(@r)
end
go
zjcxc 2004-03-23
  • 打赏
  • 举报
回复
--那个自定义函数是取随机字符串的. 我说那么眼熟,是我写的

--下面这个才是随机数字的
--自定义函数:取得指定上下限的随机数

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()
go

--自定义函数:取得指定上下限的随机数
create function f_rand(
@下限 int,
@上限 int
)
returns decimal(38,0)
as
begin
declare @r decimal(38,0)
select @r=cast(re*(@上限-@下限)+@下限 as decimal(38,0)) from v_rand
return(@r)
end
go

--调用示例
select dbo.f_rand(10,100),dbo.f_rand(10,100)

jcdwin3 2004-03-23
  • 打赏
  • 举报
回复
楼上的朋友,麻烦你看一下好象不是这样简单的也
leeboyan 2004-03-23
  • 打赏
  • 举报
回复
varchar 值 'AFC506' 转换为数据类型为 int


convert(int, 字段名)
or
cast(字段名 as int)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧