Запрос к списку таблицы с именем столбца и данными, но вместо имени столбца нужно имя бизнес-столбца из другой таблицы - PullRequest
0 голосов
/ 09 мая 2019

У меня есть несколько таблиц, одна из них - таблица сотрудников со столбцами eid, ename, sal, deptno. Когда я пишу запрос

select * from employee

вывод:

eid ename   sal deptno
1   Amit    10000   10
2   Alice   20000   20
3   Bob 12000   15

Но мне нужны некоторые названия компаний, такие как (идентификатор сотрудника, имя сотрудника, Sal сотрудника, номер отдела сотрудника) вместо имен физических столбцов, которые без использования псевдонима. Я уже сохранил имя бизнес-столбца в некоторой таблице, такой как таблица metadata_rename.

Metadata_rename table.
----------------------------------------------------------------
DBname  tablename   ColumnName  BusinessColumnName
----------------------------------------------------------------
dbo       emp         ID           Identifier
dbo       emp         FirstName    First Name
dbo       emp         LastName     Last Name
dbo       employee    eid          Employee Identifier
dbo       employee    ename        Employee Name
dbo       employee    sal          Employee Salary
dbo       employee    deptno       Employee Depatment Number

В реальном времени таблиц больше, а столбцов также 100-150, поэтому псевдоним не является хорошим вариантом. можем ли мы это динамически.

Вместо этого мы можем передать параметры и все.

Ожидаемый результат: выберите eid от сотрудника;


Имя сотрудника

Amit Алиса Боб

Select * from employee;
------------------------------------------------------------------------------
Employee Identifier    Employee Name   Employee Salary   Employee Dept. Number
------------------------------------------------------------------------------
1                    Amit                10000          10
2                    Alice               20000          20
3                    Bob                 12000          15

1 Ответ

0 голосов
/ 10 мая 2019

Я вообще думаю, что это ужасная идея, но концепция заинтриговала меня.Это действительно работает - я попробовал.Вам нужно будет расширить его еще на один слой, чтобы добавить имя базы данных.

DECLARE @tableName AS VARCHAR(64) = 'employee'

DECLARE @query AS VARCHAR(1024) = (
    'SELECT ' + STUFF((
        SELECT ',' + s.COLUMN_NAME + ' AS [' + ISNULL(a.BusinessColumnName, s.COLUMN_NAME) + ']'
        FROM INFORMATION_SCHEMA.COLUMNS AS s
        LEFT JOIN Metadata_rename AS a ON a.ColumnName = s.COLUMN_NAME
        WHERE s.TABLE_NAME = @tableName
        FOR XML PATH ('')), 1, 1, '')
    ) + ' FROM ' + @tableName
 EXEC (@query)
...