Sql server 2008 r2 带有随机数的SQL用户定义函数
我希望有人能帮助我 我试图在MS server 2008上使用SQL用户定义函数来执行以下操作 我试图预测客户何时离开银行,我通过一系列抛硬币来预测,直到你离开。投币量不一定总是50/50,因此我可以将概率作为参数传递给函数,以及当前客户任期 问题是不允许在函数中使用RAND(),我不理解为什么,但这很好,一定有原因 以下是我的功能:Sql server 2008 r2 带有随机数的SQL用户定义函数,sql-server-2008-r2,Sql Server 2008 R2,我希望有人能帮助我 我试图在MS server 2008上使用SQL用户定义函数来执行以下操作 我试图预测客户何时离开银行,我通过一系列抛硬币来预测,直到你离开。投币量不一定总是50/50,因此我可以将概率作为参数传递给函数,以及当前客户任期 问题是不允许在函数中使用RAND(),我不理解为什么,但这很好,一定有原因 以下是我的功能: create function NewTenure (@tenure integer, @p float) returns integer as begin
create function NewTenure (@tenure integer, @p float)
returns integer
as
begin
declare @r float
declare @newten int
declare @attrite binary
set @attrite=0
set @newten = @tenure
set @r = RAND()
while (@attrite = 0)
begin
if (@r <= @p) set @attrite = 1;
if (@r > @p) set @newten = @newten+1
end
return(@newten)
end
create函数NewTenure(@permission integer,@p float)
返回整数
作为
开始
声明@r float
声明@newten int
声明@attrite二进制文件
设置@attrite=0
设置@newten=@reservation
设置@r=RAND()
而(@attrite=0)
开始
如果(@r@p)设置为@newten=@newten+1
结束
返回(@newten)
结束
在我看来,我需要生成一个0-1之间的随机值,以便将其与概率进行比较,以确定客户是否离开。如果不允许使用RAND(),是否有SQL技巧在函数内部生成它?(多年前,我从学校就知道我可以编写自己的随机数生成器,但我不想这样做,也不认为我必须这样做,随机数是一种基本的计算机功能,这是人们应该期待的——我使用过的任何其他语言都有)
我计划在一个新的查询中调用该函数,在临时表离开时用预测的任期更新临时表,然后将其用于其他复杂的计算。这是一个肮脏的把戏
CREATE VIEW dbo.vRand
AS
SELECT r = RAND();
GO
CREATE FUNCTION dbo.fRand()
RETURNS DECIMAL(10,9)
AS
BEGIN
RETURN (SELECT r FROM dbo.vRand);
END
GO
SELECT name, dbo.fRand()
FROM sys.all_objects;