Названия столбцов карты в SQL

У меня есть таблица ввода

Header    DisplayName
Field1      EmpName
Field2      EmpID
Field3      IsActive
Filed4      Dept

И таблица вывода:

Field1  Field2  Field3  Filed4
 A        1       +       Q
 B        2       +       R

Как можно сопоставить отображаемые имена из входной таблицы в выходную таблицу без явного указания "Выберите Field1 AS 'EmpName', Field2 AS 'EmpID'" и т. Д.?

Есть ли причудливый способ отображения выходной таблицы таким образом, чтобы каждое поле выбирало отображаемое имя из входной таблицы?

ТИА

1 ответ

Решение

Не уверен насчет вашей ситуации, но сначала я бы попытался разобраться с вашей выходной таблицей. Однако, если это теперь возможно, вы можете использовать динамический SQL:

DECLARE @Sql NVARCHAR(MAX) = 'SELECT '
    + STUFF((
        SELECT ', [' + Header + '] AS [' + DisplayName + ']' AS [text()]
        FROM tblInput FOR XML PATH('')), 1, 2, '')
    + ' FROM tblOutput'
EXEC sys.sp_executesql @Sql

Он также будет поддерживать переменные, введенные в SQL, если вам нужно.

DECLARE @Sql NVARCHAR(MAX) = 'SELECT '
    + STUFF((
        SELECT ', [' + Header + '] AS [' + DisplayName + ']' AS [text()]
        FROM tblInput FOR XML PATH('')), 1, 2, '')
    + ' FROM tblOutput O WHERE Field1 = @Field1'
EXEC sys.sp_executesql @Sql, N'@Field1 VARCHAR(50)', @Field1 = 'A'
Другие вопросы по тегам