如何通过 SQL 查询在 table 中显示所有列及其数据类型

How to display all columns and its data type in a table via SQL query

我正在尝试从名为 'meta' 的 table 中打印列名称,我还需要它的数据类型。

我试过这个查询

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'

中的所有 table

您可以使用 the monetdb catalog:

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';

因为你正在使用 monetDB 你可以使用 sys.columns

sys.columns

它将 return 与 table 列相关的所有信息 您还可以查看 Schema, table and columns 文档以获取 monetDB

在 sql 服务器中我们得到这样的 exec sp_columns TableName

如果我理解正确,您需要查看您(或其他用户)定义的名为 meta 的 table 的列和类型?

至少有两种方法可以做到这一点:

首先(正如@GMB在) you can query the SQL catalog: 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

所以这得到了关于tablemeta的所有相关信息。我们最感兴趣的是列 id 的值,因为它唯一标识了 table.

(请注意,此 ID 在您的系统中可能会有所不同)

获得此信息后,我们可以使用此 table id 查询列 table: 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

如果您使用 MonetDB 的 mclient 实用程序,获取此信息的第二种也是首选方法是使用 mclient 的 describe 元命令。当不带参数使用时,它会显示已在当前数据库中定义的 table 的列表,当它被赋予 table 的名称时,它会打印其 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

对于MySQL:

SELECT column_name,
       data_type
FROM   information_schema.columns
WHERE  table_schema = ’ yourdatabasename ’
AND    table_name = ’ yourtablename ’;

输出:

+-------------+-----------+
| COLUMN_NAME | DATA_TYPE |
+-------------+-----------+
| Id          | int       |
| Address     | varchar   |
| Money       | decimal   |
+-------------+-----------+