ВЫБРАТЬ динамические столбцы GROUP BY динамические столбцы - PullRequest
1 голос
/ 27 июля 2011

Мне нужно выполнить следующее в хранимой процедуре:

  1. Передать параметризованные имена столбцов.
  2. Выберите параметризованные имена столбцов и укажите общую группу по выбранным столбцам.

Код:

CREATE PROCEDURE sproc (
  @column1 NVARCHAR(MAX),
  @column2 NVARCHAR(MAX),
  @startdate DATE,
  @enddate DATE ) AS

BEGIN

  DECLARE @sqlquery NVARCHAR(MAX) = 'SELECT @column1, @column2, SUM(amountcolumn)
                                       FROM tablename
                                      WHERE column3 = ''@value3'',
                                            datecolumn BETWEEN ''@startdate'' AND ''@enddate''
                                   GROUP BY @column1, @column2';

  DECLARE @params NVARCHAR(MAX) = '@column1 VARCHAR(MAX),
                                   @column2 VARCHAR(MAX),
                                   @startdate DATE,
                                   @enddate  DATE';

  EXEC sp_sqlexec @sqlquery, @params,
       @column1 = @column1,
       @column2 = @column2,
       @startdate = @startdate,
       @enddate = @enddate;

END

GO

1 Ответ

2 голосов
/ 27 июля 2011

Предполагая, что @ value3 является строкой и является другим параметром хранимой процедуры, этот столбец даты фактически является DATE, и игнорирует тот факт, что я понятия не имею, как можно получить схему, в которой поля группировки могут быть случайными, как это (которую вы проигнорировали в других недавних вопросах здесь):

DECLARE @sql NVARCHAR(MAX) = N'SELECT ' 
    + @column1 + ', ' + @column2 + ', SUM(amountcolumn)
    FROM tablename
    WHERE column3 = ''' + @value3 + '''
    AND datecolumn BETWEEN ''' + CONVERT(CHAR(10), @startdate, 120) + '''
    AND ''' + CONVERT(CHAR(8), @enddate, 120) + '''
    GROUP BY ' + @column1 + ', ' + @column2 + ';';

EXEC sp_executesql @sql; 
    -- strongly recommend against sp_sqlexec
    -- it is undocumented and unsupported

Это также предполагает, что вы не заботитесь о заказе (вы, вероятно, делаете это и захотите добавить ORDER BY, а также GROUP BY).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...