我试图创建一个用户定义的函数,该函数在其中调用系统RAND()函数,当我尝试创建该函数时,它错误并显示以下消息:



我的功能代码:

CREATE FUNCTION getNumber(@_id int)
RETURNS DECIMAL(18,4)
AS
BEGIN
   DECLARE @RtnValue DECIMAL(18,4);

   SELECT TOP 1 @RtnValue = EmployeeID
   FROM dbo.Employees
   ORDER BY EmployeeID DESC

   SET @RtnValue = RAND() * @RtnValue * (1/100)

   RETURN @RtnValue;
END

请问该如何解决?

最佳答案

问题是您不能从用户定义的函数内部调用非确定性函数。

我通过创建一个 View 来解决这个限制,在 View 内部调用该函数,然后在您的函数内部使用该 View ,就像这样……

查看定义

CREATE VIEW vw_getRANDValue
AS
SELECT RAND() AS Value

功能定义
ALTER FUNCTION getNumber(@_id int )
RETURNS DECIMAL(18,4)
AS
BEGIN
   DECLARE @RtnValue DECIMAL(18,4);
   SELECT TOP 1 @RtnValue = EmployeeID
   FROM dbo.Employees
   ORDER BY EmployeeID DESC

   SET @RtnValue = (SELECT Value FROM vw_getRANDValue) * @RtnValue * (1.0000/100.0000) --<-- to make sure its not converted to int
    RETURN @RtnValue;
END

关于sql-server - 在用户定义函数中使用RAND(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31468836/

10-11 12:44