2014-04-01 33 views
0

我已經創建了這個過程,但是這是拋出錯誤。如何用多個輸出參數編寫過程?

CREATE PROCEDURE GetSurrenderPolicyDetails 
    @policy_Id int, 
    @name nvarchar(50) output, 
    @policy_Amount Decimal(10,2) output, 
    @premiumPaidTillDate Decimal(10,2) output 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     @name = Policy_Details.Name, 
     @policy_Amount = Insurance_Policy_Details.Policy_Amount, 
     @premiumPaidTillDate = SUM(Payment_Premium_Details.Premium_Amount) 
    FROM 
     Policy_Details 
    INNER JOIN 
     Payment_Premium_Details ON (Policy_Details.Policy_Id = Payment_Premium_Details.Policy_Id) 
    INNER JOIN 
     Insurance_Policy_Details ON (Policy_Details.Ins_Id = Insurance_Policy_Details.Ins_Id) 
    WHERE 
     Policy_Details.Policy_Id = @policy_Id;  
END 
GO 

錯誤說,因爲它不是在聚合函數或GROUP BY子句中包含

列「Policy_Details.Name」在選擇列表中無效。

+1

***什麼***錯誤?我們無法看到您的屏幕,也無法讀懂您的想法 - 您必須**告訴我們**確切的錯誤! –

+0

有一件事很明顯:你的第一個'INNER JOIN'上沒有**連接條件** - **你想要連接那個表的什麼**列? –

+0

做出更改後,仍然給我錯誤 –

回答

0

那麼,錯誤是相當清楚的:你有一個SUM()聚集在你的SELECT,所以因此,你需要使用GROUP BY其它列在您的SELECT聲明:

SELECT 
     @name = Policy_Details.Name, 
     @policy_Amount = Insurance_Policy_Details.Policy_Amount, 
     @premiumPaidTillDate = SUM(Payment_Premium_Details.Premium_Amount) 
FROM 
     Policy_Details 
INNER JOIN 
     Payment_Premium_Details ON (Policy_Details.Policy_Id = Payment_Premium_Details.Policy_Id) 
INNER JOIN 
     Insurance_Policy_Details ON (Policy_Details.Ins_Id = Insurance_Policy_Details.Ins_Id) 
WHERE 
     Policy_Details.Policy_Id = @policy_Id;  
GROUP BY 
     Policy_Details.Name, 
     Insurance_Policy_Details.Policy_Amount, 
0

你的問題不是你的輸出參數,而是你的連接子句;相反,嘗試這樣的:

INNER JOIN Insurance_Policy_Details 
    ON  Policy_Details.Ins_Id = Insurance_Policy_Amount.Ins_Id 

INNER JOIN Payment_Premium_Details 
    ON  Policy_Details.Policy_Id = Payment_Premium_Details.Policy_Id 
相關問題