我正在尝试创建一个用户定义的函数来调用其中的系统RAND()函数,当我尝试使用以下消息创建它错误的函数时:
消息443,级别16,状态1,过程getNumber,行10
在函数内无效使用副作用运算符'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
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
就像任何零售业务一样,我们有一个 Orders 表和一个 Inventory 表。我要做的是检查我们有足够库存可供发货的订单。我需要考虑以下几点:
如果订单中的所有商品都可用,则将此订单视为“可交付”
按照OrderID( intvalue)的顺序检查 Order 的可交付状态。即OrderID = 12,依此类推。
在检查下一个订单的可交付性之前,减少下一个订单的可用库存(不更新库存表,只考虑之前订单已经消耗的库存数量)。
如果我们没有足够的库存用于订单中的 1 个或多个项目,请完全忽略该订单并且不要减少下一个要检查的订单的可用库存数量。
在以下示例中:
Order = 100 完全可交付,因为我们有足够的库存来存放所有产品。Order = 200 无法完全交付,因为 PID 2 需要数量 5,但在订单 100 消耗了 2 个之后,我们只剩下 3 个Order = 300也完全可交付,因为我们有所有产品的足够库存。测试数据
INSERT INTO @Inventory (PID, Qty)
VALUES (1 , 10)
, (2 , 5)
, (3 , 2)
INSERT INTO @Order (OrderID, PID, Qty)
VALUES (100 , 1 , 2) --\
, (100 , 2 …Run Code Online (Sandbox Code Playgroud)