Sql server 2008 r2 带有随机数的SQL用户定义函数

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

我希望有人能帮助我

我试图在MS server 2008上使用SQL用户定义函数来执行以下操作

我试图预测客户何时离开银行,我通过一系列抛硬币来预测,直到你离开。投币量不一定总是50/50,因此我可以将概率作为参数传递给函数,以及当前客户任期

问题是不允许在函数中使用RAND(),我不理解为什么,但这很好,一定有原因

以下是我的功能:

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;