gpt4 book ai didi

sql-server - 在用户定义函数中使用 RAND()

转载 作者:行者123 更新时间:2023-12-02 11:52:23 25 4
gpt4 key购买 nike

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

Msg 443, Level 16, State 1, Procedure getNumber, Line 10
Invalid use of a side-effecting operator 'rand' within a function.

我的函数代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com