如何将其转换为标量UDF?我会将product_id传递给UDF。从select语句转换为UDF
运行SQL 2K5
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
WHERE
product_id = @product_id
GROUP BY product_id
如何将其转换为标量UDF?我会将product_id传递给UDF。从select语句转换为UDF
运行SQL 2K5
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
WHERE
product_id = @product_id
GROUP BY product_id
编辑的情况下,未删除你决定走这条路......
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
)
这里是你将如何创建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所说,创建它作为表值函数返回多个值。
我强烈建议您不要将标量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的任何进程的执行计划。
像这样的内联TVF通常会比标量UDF执行得更好,因为优化器的表现更好。典型用法如下:SELECT t。*,products.qty FROM t OUTER APPLY [dbo]。[products](t.product_id)AS产品 – 2010-05-07 00:20:43
此外 - 如果可能的话,拒绝创建多语句TVF的诱惑 - 这些无法像内联TVF一样进行优化。 – 2010-05-07 00:21:46