Названия столбцов карты в 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'