存储过程:GROUP BY表达式必须至少包含一个不是外部引用的列

时间:2018-03-31 02:02:21

标签: sql sql-server stored-procedures

我创建了一个存储过程。 @Sea是用户的输出参数。在内联查询中它正在执行但在存储过程中没有得到错误。

Create Procedure [dbo].[procedure name]
(
    @APTSeason NVARCHAR(1000),
    @rptsummary NVARCHAR(1000),
    @Sea NVARCHAR(1000)
)
AS
BEGIN

    SELECT (@Sea),
        Sum(ProjectedRevenue) as 'Total_$',
        Sum(TotalSalesUnits) as 'Total_U',


    From  table name

    group by @Sea
END
Go

错误:

  

每个GROUP BY表达式必须至少包含一个不是外部引用的列

2 个答案:

答案 0 :(得分:0)

- GROUP BY CLAUSE应该包括SELECT QUERY中的列,没有任何立场或常数。

您可以尝试以下步骤进行解决:

  1. 给@set一个带有as子句的别名。
  2. 删除具有@set。
  3. 的group by子句

    它会给出结果而不会出错。

答案 1 :(得分:0)

我认为您正在寻找Dynamic SQL

Create Procedure [dbo].[procedure name]
(
    @APTSeason NVARCHAR(1000),
    @rptsummary NVARCHAR(1000),
    @Sea NVARCHAR(1000)
)
AS
BEGIN

DECLARE @SQL VARCHAR(MAX)

SET @SQL = 'SELECT (' + QUOTENAME(@Sea) +'),
        Sum(ProjectedRevenue) as ''Total_$'',
        Sum(TotalSalesUnits) as ''Total_U'',


    From  table name

    group by ' + QUOTENAME(@Sea)

PRINT(@SQL)
--EXEC(@SQL)  --Comment this in if the previous "Print" outputs the correct SQL
END
Go

PS:如果不在SP中的任何地方使用@APTSeason@rptsummary,我就不会看到parentClosedWS[i];$("#workShop option[value=" + parentClosedWS[i] + "]").prop('disabled', true);