Строковые функции для генерации динамического запроса в SQL Server 2008 - PullRequest
0 голосов
/ 15 ноября 2011

Select * from MyTable дает следующий результат

AttributeID                          AttributeName
------------------------------------ ------------------------
6B93119B-263B-4FED-AA89-198D26A3A3C4 DOB
E27DBA94-F387-460A-BC02-84878692BDF6 Sex
ABF3B85C-0DEA-44FE-857A-AC63520F7294 History

Теперь я хочу сгенерировать динамический запрос в следующем формате (для использования с PIVOT)

 SELECT 
  [6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB,

  [E27DBA94-F387-460A-BC02-84878692BDF6] Sex,

  [ABF3B85C-0DEA-44FE-857A-AC63520F7294] History

Как я могу сделать это в SQL Server 2008?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011
DECLARE @query VARCHAR(MAX)
SET @query = 'SELECT '

SELECT @query = @query + '[' + CONVERT(NVARCHAR(50),AttributeID) + '] ' + AttributeName + ',' 
FROM MyTable

PRINT @query
0 голосов
/ 15 ноября 2011

Следующий результат дает желаемый результат для меня:

DECLARE @Query VARCHAR(MAX);

SET @Query = 'SELECT ';

WITH Data AS (
    SELECT '6B93119B-263B-4FED-AA89-198D26A3A3C4' AS AttributeID, 'DOB' AS AttributeName

    UNION ALL

    SELECT 'E27DBA94-F387-460A-BC02-84878692BDF6', 'Sex'

    UNION ALL

    SELECT 'ABF3B85C-0DEA-44FE-857A-AC63520F7294', 'History'
)
SELECT @Query = @Query + '''' + AttributeID + ''' ' + AttributeName + ', '
FROM Data

SET @Query = SUBSTRING(@Query, 1, LEN(@Query) - 1);

SELECT @Query

Редактировать: Просто чтобы быть понятным, раздел SQL в приведенном выше примере начинается с "WITH Data AS (" иокончание в закрывающей скобке (")") есть только в качестве примера данных.Вы можете опустить его полностью, поэтому образец становится:

DECLARE @Query VARCHAR(MAX);

SET @Query = 'SELECT ';

SELECT @Query = @Query + '''' + AttributeID + ''' ' + AttributeName + ', '
FROM MyTable

SET @Query = SUBSTRING(@Query, 1, LEN(@Query) - 1);

SELECT @Query
...