Архив метки: динамический запрос

Переменные для имени колонки ms sql

MsSql_Declare Переменные в ms sqlНеобходимо заменить название имени столбца на значение из переменной.  То есть брать название столбца из переменной. В Ms SQL  это можно сделать достаточно просто через  exec().

Итак стандартный запрос

SELECT '001' AS [CODLIS]
, DATAVAL
, stuff(tbl.COD, 10, 2, 'DL') AS CODART
, tbl.DL AS PR
FROM
tbl
WHERE
tbl.DL > 0

Как видно текст DL встречается аж в 3 местах. Вот его нам надо заменить на свою переменную, чтобы меняя только значение переменной менять и имя колонки и текст в функции stuff.

Делается это так.

Создаём 2 переменные. В одной будет имя колонки, в другой сам запрос.

DECLARE @str varchar(3000),@nameCol varchar(2); 

Устанавливаем значения. Не забываем про двойной апостроф

Set  @nameCol = 'DL'

Set @str = 'SELECT ''001'' AS [CODLIS]
     , ''03.28.2015 0:00:00'' AS DATAVAL
     , stuff(tbl.COD, 10, 2, '''+@nameCol+''') AS CODART
     , '+@nameCol+' AS PR
FROM
 tbl
WHERE
 '+@nameCol+' > 0'

Теперь запускаем наш запрос используя exec()

exec(@str)

Вот собственно и все, меняя значение переменной @nameCol меняем и сам запрос и имена столбцов.