2017-11-25 98 views
0

我创建了一个名为PV的函数,它以最低的代价显示我v_id。现在我想调用该函数,并希望SQL本v_id显示如何在SQL Server 2014的新函数中调用函数

p_name, p_description, QH associated 

。我的问题是我该怎么做?

我的桌子下面,我的功能代码一起:

  • Tb1中:P(P_ID(PK),p_name CHAR(60),p_description VARCHAR(300),QH(INT)
  • Tb2的: VP(vp_id(PK),成本,P_ID(FK),v_id(FK))
  • TB3:V(v_id(PK),v_name)

代码:

CREATE FUNCTION PV (@ptid AS INT) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @vid AS INT 
    DECLARE @min AS INT 

    SELECT 
     ptid = VP.P_ID, @vid = VP.V_ID, 
     @min = MIN(VP.COST) 
    FROM 
     VPr 
    GROUP BY 
     VP.P_ID, VP.V_ID 
    HAVING 
     MIN(VP.COST) < 25 

    RETURN @vid 
END; 
GO 

注意:如果我执行此功能,以及我的ptid输入为9,它将返回正确的v_id。重申:我想与p_name,p_description和qh一起调用这个函数我是SQL函数的新手。请给我一个解释。

在此先感谢!

回答

1

这是否你在寻找什么:

SELECT 
    p_name 
    , p_description 
    , qh 
    , v_id 
FROM 
    (
     SELECT 
      P.p_name 
      , P.p_description 
      , P.qh 
      , vp.v_id 
      , ROW_NUMBER() OVER (ORDER BY vp.cost) R 
     FROM 
      P 
      JOIN vp ON P.p_id = vp.p_id 
     WHERE vp.v_id = dbo.PV(9) -- you may need to alter the schema from 'dbo' 
    ) Q 
WHERE R = 1 
+0

可以请你详细说明“你可能需要改变从‘DBO’模式” – biggboss2019

+0

如果函数存储在不同的模式,例如, ,而不是'DatabaseName.dbo.PV',它可能是'DatabaseName.Functionality.PV',或类似的东西,在这种情况下,你会指定'Functionality.PV'。 –

+0

谢谢!我已经尝试了上面的代码。但不是显示一个v_id结果,而是显示两个v_id结果。我有两个不同的p_name中有一个v_id INSERTED。有关如何解决这个问题的任何建议? – biggboss2019