2017-11-25 347 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