如何将其转换为标量UDF?我将product_id传递给UDF。
运行SQL 2k5
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
WHERE
product_id = @product_id
GROUP BY product_id
答案 0 :(得分:2)
我强烈建议您不要使用标量UDF进行任何重要处理。对于单个呼叫,它并不坏,但是为任何大量行调用它通常表现得非常糟糕。
如果你在其他行集中为多个产品调用它,则UDF将无法很好地扩展。
视图或内联表值函数的表现会更好: 即。
CREATE VIEW vQuantity AS
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
GROUP BY product_id
和
SELECT *
FROM t
LEFT JOIN vQuantity ON vQuantity.product_id = t.product_id
或
CREATE FUNCTION udfQuantity(any params) RETURNS TABLE AS
RETURN (
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
GROUP BY product_id
)
和
SELECT *
FROM t
LEFT JOIN udfQuantity(any params) AS Quantity ON Quantity.product_id = t.product_id
我强烈建议您查看使用标量UDF的任何进程的执行计划。
答案 1 :(得分:1)
修改如果您决定采用此路线,则取消删除...
CREATE FUNCTION [dbo].[products]
(
@product_id int
)
RETURNS TABLE
AS RETURN
(
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
WHERE
product_id = @product_id
)
答案 2 :(得分:1)
以下是如何创建UDF以便它返回产品数量的整数值。
CREATE FUNCTION getProductQuantity (
@product_id int
)
RETURNS int
AS
BEGIN
DECLARE @Return int
SELECT @Return = sum(qty) as qty FROM vProductQuantity WHERE product_id = @product_id GROUP BY product_id
RETURN @return
END
正如Martin回答的那样,将其创建为表值函数以返回多个值。