Как отобразить все столбцы и их тип данных в таблице с помощью SQL-запроса - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь напечатать имена столбцов из таблицы, называемой «мета», и мне также нужны ее типы данных.

Я пробовал этот запрос

SELECT meta FROM INFORMATION_SCHEMA.TABLES;

, но выдает ошибку, сообщающую, что информационная схема недоступна. Не могли бы вы помочь мне, я новичок в SQL.

Редактировать:

select tables.name from tables join schemas on 
tables.schema_id=schemas.id where schemas.name=’sprl_db’ ;

Этот запрос дает мне все таблицы в базе данных 'sprl_db'

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

когда вы используете monetDB, вы можете получить это с помощью sys.columns

sys.columns

, он вернет всю информацию, относящуюся к столбцам таблицы, которую вытакже можно проверить Схема, таблица и столбцы документация для monetDB

на сервере SQL мы получаем, что это так exec sp_columns TableName

0 голосов
/ 31 октября 2019

Если я правильно понимаю, вам нужно увидеть столбцы и типы таблиц, которые вы (или какой-то другой пользователь) определили как meta?

Есть как минимум два способа сделать это:

Сначала (как @GMB упомянул в их ответ ) вы можете запросить каталог SQL: https://www.monetdb.org/Documentation/SQLcatalog/TablesColumns

SELECT * FROM sys.tables WHERE NAME='meta';

+------+------+-----------+-------+------+--------+---------------+--------+-----------+
| id   | name | schema_id | query | type | system | commit_action | access | temporary |
+======+======+===========+=======+======+========+===============+========+===========+
| 9098 | meta |      2000 | null  |    0 | false  |             0 |      0 |         0 |
+------+------+-----------+-------+------+--------+---------------+--------+-----------+
1 tuple

Таким образом, вы получите всю необходимую информацию о таблице meta. Нас больше всего интересует значение столбца id, поскольку он однозначно идентифицирует таблицу.

(обратите внимание, что этот идентификатор, вероятно, будет отличаться в вашей системе)

После того, как мы получим этоинформация, которую мы можем запросить в таблице столбцов с этим идентификатором таблицы: SELECT * FROM sys.columns WHERE table_id=9098;

+------+------+------+-------------+------------+----------+---------+-------+--------+---------+
| id   | name | type | type_digits | type_scale | table_id | default | null  | number | storage |
+======+======+======+=============+============+==========+=========+=======+========+=========+
| 9096 | i    | int  |          32 |          0 |     9098 | null    | true  |      0 | null    |
| 9097 | j    | clob |           0 |          0 |     9098 | null    | true  |      1 | null    |
+------+------+------+-------------+------------+----------+---------+-------+--------+---------+
2 tuples

Поскольку вас интересуют только имена и типы столбцов, вы можете изменить этот запрос следующим образом:

SELECT name, type FROM sys.columns WHERE table_id=9098;

+------+------+
| name | type |
+======+======+
| i    | int  |
| j    | clob |
+------+------+
2 tuples

Вы можете объединить два запроса выше с объединением:

SELECT col.name, col.type FROM sys.tables as tab JOIN sys.columns as col ON tab.id=col.table_id WHERE tab.name='meta';

+------+------+
| name | type |
+======+======+
| i    | int  |
| j    | clob |
+------+------+
2 tuples

Второй и предпочтительный способполучить эту информацию, если вы используете утилиту mclient MonetDB, используя мета-команду description mclient. При использовании без аргументов он представляет список таблиц, которые были определены в текущей базе данных, и когда ему присваивается имя таблицы, он печатает определение SQL:

sql>\d
TABLE  sys.data
TABLE  sys.meta
sql>\d sys.meta
CREATE TABLE "sys"."meta" (
        "i" INTEGER,
        "j" CHARACTER LARGE OBJECT
);

. Вы можете использовать \?мета-команда, чтобы увидеть список всех мета-команд в mclient:

sql>\?
\?       - show this message
\<file   - read input from file
\>file   - save response in file, or stdout if no file is given
\|cmd    - pipe result to process, or stop when no command is given
\history - show the readline history
\help    - synopsis of the SQL syntax
\D table - dumps the table, or the complete database if none given.
\d[Stvsfn]+ [obj] - list database objects, or describe if obj given
\A       - enable auto commit
\a       - disable auto commit
\e       - echo the query in sql formatting mode
\t       - set the timer {none,clock,performance} (none is default)
\f       - format using renderer {csv,tab,raw,sql,xml,trash,rowcount,expanded,sam}
\w#      - set maximal page width (-1=unlimited, 0=terminal width, >0=limit to num)
\r#      - set maximum rows per page (-1=raw)
\L file  - save client-server interaction
\X       - trace mclient code
\q       - terminate session and quit mclient
0 голосов
/ 30 октября 2019

Вы можете использовать каталог monetdb :

select c.name, c.type, c.type_digits, c.type_scale
from sys.columns c
inner join sys.tables t on t.id = c.table_id and t.name = 'meta';
...