Stored procedures 如何编写具有多个输出参数的过程?

Stored procedures 如何编写具有多个输出参数的过程?,stored-procedures,sql-server-2008-r2,Stored Procedures,Sql Server 2008 R2,我创建了这个过程,但这是抛出错误 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_D

我创建了这个过程,但这是抛出错误

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
错误是

列“Policy_Details.Name”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中


问题不在于输出参数,而在于连接子句;相反,请尝试以下方法:

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

错误很明显:您的
SELECT
中有一个
SUM()
聚合,因此,您需要对
SELECT
语句中的其他列使用
groupby

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,

什么错误?我们看不到你的屏幕,也看不到你的心思——你必须准确地告诉我们错误是什么!有一点非常明显:在第一次
内部联接上没有联接条件-您想在哪个列上联接该表???在进行更改后,它仍然会给我错误信息