如何將其轉換爲標量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