我试图创建一个用户定义的函数,该函数在其中调用系统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/