我正在使用SQL 2k5 sproc。在Sproc中多次使用UDF
我需要引用UDF來根據幾個變量和用戶權限計算價格。我最初試圖這一點,但它沒有工作,因爲我沒有引用一個場...
SELECT dbo.f_GetPrice(model,userid,authType) 'YourPrice', name, description
FROM tblRL_Products
WHERE 'YourPrice' Between @fromPrice AND @toPrice
OR 'YourPrice' IS NULL
所以我修改這
SELECT dbo.f_GetPrice(model,userid,authType) 'YourPrice', name, description
FROM tblRL_Products
WHERE dbo.f_GetPrice(model,userid,authType) Between @fromPrice AND @toPrice
OR dbo.f_GetPrice(model,userid,authType) IS NULL
當SQL執行該存儲過程,它是運行函數3X的每個記錄或它是否運行一次,並使用其他兩個位置每行的值。
有沒有更有效的方法來做到這一點?
編輯
這是標量UDF。它需要根據用戶授權的類型獲取價格,然後一旦我們有合適的價格,我們需要對其進行計算。這全部存儲在授權表中。每個用戶都有對每一行產品的授權。因此,他們可能會針對每條線有不同的價格類型和計算方式,在單個搜索結果調用中返回數十行甚至數百行。
在上面的代碼中,我使用了authType,這是一箇舊的調用,我們不再使用該參數。
ALTER function [dbo].[f_GetPrice]
(
@model uniqueidentifier,
@userID uniqueidentifier
)
returns money
as
begin
Declare @yourPrice money
WITH ProductPrice AS(
SELECT (CASE PriceType
WHEN 'msrp' THEN p.price_msrp
WHEN 'jobber' THEN p.price_jobber
WHEN 'warehouse' THEN p.price_warehouse
WHEN 'margin' THEN p.price_margin
WHEN 'mycost' THEN p.price_mycost
WHEN 'customprice1' THEN p.price_custom1
WHEN 'customprice2' THEN p.price_custom2
WHEN 'customprice3' THEN p.price_custom2
ELSE p.price_msrp
END) as YourPrice, aup.calc, aup.amount
FROM products p
JOIN lines l ON l.lineID=l.lineID
JOIN authorizations a ON l.authlineID=a.authlineID
JOIN authorizationusers au ON a.auID=au.auID
JOIN authorizationuserprices aup ON au.aupID=aup.aupID
WHERE [email protected] AND [email protected])
SELECT @yourPrice=(CASE calc
WHEN 'amount' THEN YourPrice+amount
WHEN 'percent' THEN YourPrice+(YourPrice*amount/100)
WHEN 'divide' THEN YourPrice/amount
WHEN 'factore' THEN YourPrice*amount
WHEN 'none' THEN YourPrice
ELSE YourPrice
END) FROM ProductPrice
return @yourPrice
END
更好的,請出示dbo.f_GetPrice'的'代碼,我們可以幫你把它*** ***真的很好 – swasheck