- Решения с
INFORMATION_SCHEMA
имеют целевую таблицу или таблицу. - Решения с
...describe_first_result_set
должны передавать SELECT
в виде строки, это может быть откат (динамическое выполнение c).
Итак, есть одно решение используя универсальные c способности XQuery:
Мы используем SELECT TOP 1 * FROM ...
, чтобы получить XML -результат из одной строки. Для демонстрации я использую sys.objects
здесь:
DECLARE @YourSelect XML=
(
SELECT TOP 1 *
FROM sys.objects o
FOR XML PATH('')
);
- Это запрос:
WITH tally(Nr) AS(SELECT TOP(@YourSelect.value('count(/*)','int')) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM master..spt_values)
SELECT Nr
,@YourSelect.value('local-name((*[sql:column("Nr")])[1])','nvarchar(max)')
FROM tally;
Идея вкратце:
- Мы используем tally-on-the-fly с вычисленным предложением
TOP()
, чтобы получить текущий список чисел. Вычисленный TOP уменьшит этот список до фактического количества столбцов. - Мы используем XQuery
local-name()
и подстановочный XPath с *
, чтобы получить каждый элемент по его позиции.
Результатом является нумерованный список имен столбцов.
Nr column_name
1 name
2 object_id
3 schema_id
4 parent_object_id
5 type
6 type_desc
7 create_date
8 modify_date
9 is_ms_shipped
10 is_published
11 is_schema_published
Подсказка:
- Вы можете добавить предложение
WHERE
для фильтрации по данному имени столбца - Это может быть полностью встроено, если необходимо ...