Получить столбцы таблицы столбцов - PullRequest
3 голосов
/ 07 марта 2020

Как получить список столбцов представления INFORMATION_SCHEMA.COLUMNS?

Я могу получить столбцы любой таблицы, которую я создаю, используя:

select *
from information_schema.columns
where table_name = 'MY_TABLE'

Набор результатов включает несколько столбцы, такие как:

  • TABLE_CATALOG
  • TABLE_SCHEMA
  • TABLE_NAME
  • COLUMN_NAME
  • DATA_TYPE
  • et c.

Как я могу получить полный список этих столбцов? Кажется, что представление COLUMNS не включает в себя свои столбцы сами по себе (как в Oracle, PostgreSQL или MySQL). Если я бегу:

select * 
from information_schema.columns
where table_name = 'COLUMNS'

, я ничего не получаю. Возможно я ищу не в том месте.

Ответы [ 2 ]

1 голос
/ 08 марта 2020

SQL Сервер хранит свои метаданные в схеме sys.
INFORMATION_SCHEMA был добавлен позже как часть SQL соответствия ISO.

select   s.name as schema_name
        ,o.name as table_name
        ,c.name as column_name
        ,t.name as type_name
from         sys.schemas        s
        join sys.all_objects    o on o.schema_id = s.schema_id
        join sys.all_columns    c on c.object_id = o.object_id
        join sys.types          t on t.system_type_id = c.system_type_id and t.user_type_id = c.user_type_id
where   s.name = 'INFORMATION_SCHEMA'
    and o.name = 'COLUMNS'

.

+--------------------+------------+--------------------------+-----------+
|    schema_name     | table_name |       column_name        | type_name |
+--------------------+------------+--------------------------+-----------+
| INFORMATION_SCHEMA | COLUMNS    | TABLE_CATALOG            | nvarchar  |
| INFORMATION_SCHEMA | COLUMNS    | TABLE_SCHEMA             | nvarchar  |
| INFORMATION_SCHEMA | COLUMNS    | TABLE_NAME               | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | COLUMN_NAME              | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | ORDINAL_POSITION         | int       |
| INFORMATION_SCHEMA | COLUMNS    | COLUMN_DEFAULT           | nvarchar  |
| INFORMATION_SCHEMA | COLUMNS    | IS_NULLABLE              | varchar   |
| INFORMATION_SCHEMA | COLUMNS    | DATA_TYPE                | nvarchar  |
| INFORMATION_SCHEMA | COLUMNS    | CHARACTER_MAXIMUM_LENGTH | int       |
| INFORMATION_SCHEMA | COLUMNS    | CHARACTER_OCTET_LENGTH   | int       |
| INFORMATION_SCHEMA | COLUMNS    | NUMERIC_PRECISION        | tinyint   |
| INFORMATION_SCHEMA | COLUMNS    | NUMERIC_PRECISION_RADIX  | smallint  |
| INFORMATION_SCHEMA | COLUMNS    | NUMERIC_SCALE            | int       |
| INFORMATION_SCHEMA | COLUMNS    | DATETIME_PRECISION       | smallint  |
| INFORMATION_SCHEMA | COLUMNS    | CHARACTER_SET_CATALOG    | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | CHARACTER_SET_SCHEMA     | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | CHARACTER_SET_NAME       | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | COLLATION_CATALOG        | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | COLLATION_SCHEMA         | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | COLLATION_NAME           | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | DOMAIN_CATALOG           | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | DOMAIN_SCHEMA            | sysname   |
| INFORMATION_SCHEMA | COLUMNS    | DOMAIN_NAME              | sysname   |
+--------------------+------------+--------------------------+-----------+
1 голос
/ 07 марта 2020

Использование sys.dm_exec_describe_first_result_set :

SELECT *
FROM sys.dm_exec_describe_first_result_set(
     N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS', NULL, 0);

db <> fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...