当前位置: 代码迷 >> Sql Server >> 怎么用UDF做一个产生1-6的功能?(做一个色子)
  详细解决方案

怎么用UDF做一个产生1-6的功能?(做一个色子)

热度:91   发布时间:2016-04-24 08:50:43.0
如何用UDF做一个产生1-6的功能?(做一个色子)
这里是代码:
create function [dbo].[scalar_Disc]
()
returns int
as 
begin
  return (select( cast( rand() * 10 as int ) ) / 6 +1)
end

这个代码运行不了:
error是invalid use of a side-effecting operator 'rand' within a function.

好像是rand()的问题
请问1. 错在哪里?2. 如何更正?

求教~
------解决思路----------------------

-- 自定义函数中,不能使用 newid() , rand() 这两个函数,别的函数暂时未发现
-- 可以使用  getdate (),取出毫秒

drop function scalar_disc
go
create function [dbo].[scalar_Disc]
()
returns varchar(32)
as 
begin
  return (datepart(ms,getdate()) ^2 / 10 ) % 6 + 1
end
go
select [dbo].[scalar_Disc]()
go 10

开始执行循环

--------------------------------
5

(1 行受影响)


--------------------------------
4

(1 行受影响)


--------------------------------
6

(1 行受影响)


--------------------------------
2

(1 行受影响)


--------------------------------
4

(1 行受影响)


--------------------------------
3

(1 行受影响)


--------------------------------
5

(1 行受影响)


--------------------------------
4

(1 行受影响)


--------------------------------
4

(1 行受影响)


--------------------------------
3

(1 行受影响)

批处理执行已完成 10 次。



------解决思路----------------------
大不了用存储过程啊
alter procedure [dbo].[MYRAND]
as 
begin
  select cast( rand() * 10000 as int ) % 6
end

exec myrand
  相关解决方案