Запрос имени столбца запроса в SQL Server

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

Пример:

У меня есть таблица, содержащая столбец ID и столбец строки. Имя таблицы test, и в ней есть столбцы testID и test.

Этот запрос:

select column_name 
from information_schema.columns 
where table_name = 'teszt'

вернуть имена столбцов моей таблицы. Таким образом, он возвращает testID и Test.

Я хочу, чтобы я использовал такой запрос:

select count(*) as Amount from test 

Мне нужен запрос, который может возвращать имена столбцов моего запроса. Так что в этом конкретном случае он возвращает строку «Сумма». Не знаю, возможно ли это.


person Gabor    schedule 24.03.2014    source источник


Ответы (3)


Не уверен, есть ли более простой способ получить имена столбцов с псевдонимами, но один из способов сделать это - через XML. Этот запрос вернет одну строку на столбец во внутреннем запросе:

select T1.res.value('local-name(.)', 'varchar(50)')
from (select cast(
(
    select count(*) as Amount from test
    for xml raw) as xml
)) q(res)
CROSS APPLY q.res.nodes('/row/@*') as T1(res)
person NamingIsHard    schedule 24.03.2014

В SQL Server 2012 у вас есть хранимая процедура, которую вы можете использовать именно для этой цели.

sp_describe_first_result_set (Transact-SQL)

SQL Fiddle

Настройка схемы MS SQL Server 2012:

create table test(id int);

Запрос 1:

exec sp_describe_first_result_set N'select count(*) as Amount from test'

Результаты:

| IS_HIDDEN | COLUMN_ORDINAL |   NAME | IS_NULLABLE | SYSTEM_TYPE_ID | SYSTEM_TYPE_NAME | MAX_LENGTH | PRECISION | SCALE | COLLATION_NAME | USER_TYPE_ID | USER_TYPE_DATABASE | USER_TYPE_SCHEMA | USER_TYPE_NAME | ASSEMBLY_QUALIFIED_TYPE_NAME | XML_COLLECTION_ID | XML_COLLECTION_DATABASE | XML_COLLECTION_SCHEMA | XML_COLLECTION_NAME | IS_XML_DOCUMENT | IS_CASE_SENSITIVE | IS_FIXED_LENGTH_CLR_TYPE | SOURCE_SERVER | SOURCE_DATABASE | SOURCE_SCHEMA | SOURCE_TABLE | SOURCE_COLUMN | IS_IDENTITY_COLUMN | IS_PART_OF_UNIQUE_KEY | IS_UPDATEABLE | IS_COMPUTED_COLUMN | IS_SPARSE_COLUMN_SET | ORDINAL_IN_ORDER_BY_LIST | ORDER_BY_IS_DESCENDING | ORDER_BY_LIST_LENGTH | TDS_TYPE_ID | TDS_LENGTH | TDS_COLLATION_ID | TDS_COLLATION_SORT_ID |
|-----------|----------------|--------|-------------|----------------|------------------|------------|-----------|-------|----------------|--------------|--------------------|------------------|----------------|------------------------------|-------------------|-------------------------|-----------------------|---------------------|-----------------|-------------------|--------------------------|---------------|-----------------|---------------|--------------|---------------|--------------------|-----------------------|---------------|--------------------|----------------------|--------------------------|------------------------|----------------------|-------------|------------|------------------|-----------------------|
|         0 |              1 | Amount |           1 |             56 |              int |          4 |        10 |     0 |         (null) |       (null) |             (null) |           (null) |         (null) |                       (null) |            (null) |                  (null) |                (null) |              (null) |               0 |                 0 |                        0 |        (null) |          (null) |        (null) |       (null) |        (null) |                  0 |                (null) |             0 |                  0 |                    0 |                   (null) |                 (null) |               (null) |          38 |          4 |           (null) |                (null) |
person Mikael Eriksson    schedule 24.03.2014

Может вы хотите что-то подобное? :-)

SELECT AMOUNT
FROM
(
SELECT COUNT(*) AS AMOUNT
FROM TEST
)X
person Mike    schedule 24.03.2014