2011-05-06 96 views
0

在SQL 2000上:需要关于SQL UDF的帮助?

我想写一个动态的UDF,将根据输入条件拉出五个字段之一的值。以下是我迄今为止:

CREATE FUNCTION dbo.fBudgetBid (@sJob int, @sCO nvarchar(10), @sCat nvarchar(10)) 
RETURNS float 
AS 
BEGIN 
    Declare @ERC float 
    Set @ERC = Case @sCat 
    WHEN 'Field' Then Select [Field] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO 
    WHEN 'Eng' Then Select [Eng] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO 
    WHEN 'PM' Then Select [PM] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO 
    WHEN 'Shop' Then Select [Shop] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO 
    WHEN 'Purch' Then Select [Purch] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO 
    END 
    Return @ERC 
END 

我用一个SELECT语句返回一个值,而我用的情况下THEN结构返回硬编码值。没有任何运气混合两者。 **这些名字已经改变,以保护无辜者。 **

更新:得到它的工作如下。圆括号在世界上造成了所有的不同。

BEGIN 
Return (Case @sCat 
    WHEN 'Field' Then (Select [Field] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO) 
    WHEN 'Eng' Then (Select [Eng] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO) 
    WHEN 'PM' Then (Select [PM] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO) 
    WHEN 'Shop' Then (Select [Shop] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO) 
    WHEN 'Purch' Then (Select [Purch] From [dbo].[Estimate] Where [Job] = @sJob AND [] ] = @sCO) 
    END) 
END 

回答

2

试试这个,看看它是否回答您的要求。

DEClARE @ERC FLOAT 

SELECT @ERC = CASE @sCat WHEN 'Field' THEN [Field] 
      WHEN 'Eng' THEN [Eng] 
      WHEN 'PM' THEN [PM] 
      WHEN 'Shop' THEN [Shop] 
      WHEN 'Purch' THEN [Purch] END 
FROM [dbo].[Estimate] 
WHERE [Job] = @sJob 
AND [CO] = @sCO 

RETURN @ERC