我自己定义一个函数:有误,为什么?

vsice 2003-09-12 05:06:42
create function GetRanPSW()
--获取随机数
returns numeric(18,18) as
begin
declare @aa numeric(18,18)
--(其它)
SELECT RAND() --这个rand()好像不能在自定义函数中调用
--(其它)
return @aa
end
...全文
36 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vsice 2003-09-12
  • 打赏
  • 举报
回复
好,我试试。
这时每次都要产生一个表,再调用这个表,觉得有点麻烦,会不会影响速度?
vsice 2003-09-12
  • 打赏
  • 举报
回复
那有什么简单办法返回一个:指定长度的随机字符串?
如返回结果:8位的随机字符串。
CrazyFor 2003-09-12
  • 打赏
  • 举报
回复
解决办法:

有时为了方便,
有些语句是不方便通过存储过程来完成。
但函数又不能访问诸如getdate(),@@spid等结果不确认的内置函数。

本人提供一变通解决方法,以getdate为例,通过视图来解决这个问题:
---------------------------------------------------------------
create view v_getdate
as
select * from (select cast(getdate() as datetime) as output) as a
go
---------------------------------------------------------------
create function f_getdate()
returns datetime
as
begin
declare @n datetime
select @n = output from v_getdate
return(@n)
end
go
---------------------------------------------------------------

调用:select dbo.f_getdate()
CrazyFor 2003-09-12
  • 打赏
  • 举报
回复
解决办法:

有时为了方便,
有些语句是不方便通过存储过程来完成。
但函数又不能访问诸如getdate(),@@spid等结果不确认的内置函数。

本人提供一变通解决方法,以getdate为例,通过视图来解决这个问题:
---------------------------------------------------------------
create view v_getdate
as
select * from (select cast(getdate() as datetime) as output) as a
go
---------------------------------------------------------------
create function f_getdate()
returns datetime
as
begin
declare @n datetime
select @n = output from v_getdate
return(@n)
end
go
---------------------------------------------------------------

调用:select dbo.f_getdate()
zjcxc 元老 2003-09-12
  • 打赏
  • 举报
回复
自定义函数中不允许rand函数


允许在用户定义函数主体中内置不确定函数;这些不确定函数如下:

@@CONNECTIONS @@TOTAL_ERRORS
@@CPU_BUSY @@TOTAL_READ
@@IDLE @@TOTAL_WRITE
@@IO_BUSY GETDATE
@@MAX_CONNECTIONS GETUTCDATE
@@PACK_RECEIVED NEWID
@@PACK_SENT RAND
@@PACKET_ERRORS TEXTPTR
@@TIMETICKS
happydreamer 2003-09-12
  • 打赏
  • 举报
回复
create view va
as
SELECT RAND() as a
go


create function GetRanPSW()
--获取随机数
returns numeric(18,18) as
begin
declare @aa numeric(18,18)
--(其它)
select @aa=a from va --这个rand()好像不能在自定义函数中调用
--(其它)
return @aa
end

因为函数内不允许使用不确定值
happydreamer 2003-09-12
  • 打赏
  • 举报
回复
create view va
as
SELECT RAND() as a
go


create function GetRanPSW()
--获取随机数
returns numeric(18,18) as
begin
declare @aa numeric(18,18)
--(其它)
select @aa=a from va --这个rand()好像不能在自定义函数中调用
--(其它)
return @aa
end

因为函数内不允许使用不确定值
happydreamer 2003-09-12
  • 打赏
  • 举报
回复
create view va
as
SELECT RAND() as a
go


create function GetRanPSW()
--获取随机数
returns numeric(18,18) as
begin
declare @aa numeric(18,18)
--(其它)
select @aa=a from va --这个rand()好像不能在自定义函数中调用
--(其它)
return @aa
end

因为函数内不允许使用不确定值
CrazyFor 2003-09-12
  • 打赏
  • 举报
回复
是的,

不允许在用户定义函数主体中内置不确定函数;这些不确定函数如下:

@@CONNECTIONS @@TOTAL_ERRORS
@@CPU_BUSY @@TOTAL_READ
@@IDLE @@TOTAL_WRITE
@@IO_BUSY GETDATE
@@MAX_CONNECTIONS GETUTCDATE
@@PACK_RECEIVED NEWID
@@PACK_SENT RAND
@@PACKET_ERRORS TEXTPTR
@@TIMETICKS
yujohny 2003-09-12
  • 打赏
  • 举报
回复
rand不能在自定义函数中调用

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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