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

假装没事ソ 提交于 2020-02-06 15:44:45

问题


I am trying to print the column names from a table called 'meta' and I need also its data types.

I tried this query

SELECT meta FROM INFORMATION_SCHEMA.TABLES;

but it throws an error saying no information schema available. Could you please help me, I am a beginner in SQL.

Edit:

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

This query gives me all the tables in database 'sprl_db'


回答1:


You can use 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';



回答2:


as you are using monetDB you can get that by using sys.columns

sys.columns

it will return all information related to table columns you can also check Schema, table and columns documentation for monetDB

in sql server we get that like this exec sp_columns TableName




回答3:


If I understand correctly you need to see the columns and the types of a table you (or some other user) defined called meta?

There are at least two ways to do this:

First (as @GMB mentioned in their answer) 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

So this gets all the relevant information about the table meta. We are mostly interested in the value of the column id because this uniquely identifies the table.

(Please note that this id will probably be different in your system)

After we have this information we can query the columns table with this table 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

Since you are only interested in the names and types of the columns, you can modify this query as follows:

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

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

You can combine the two queries above with a join:

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

The second, and preferred way to get this information if you are using the mclient utility of MonetDB, is by using the describe meta-command of mclient. When used without arguments it presents a list of tables that have been defined in the current database and when it is given the name of the table it prints its SQL definition:

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

You can use the \? meta-command to see a list of all meta-commands in 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


来源:https://stackoverflow.com/questions/58626069/how-to-display-all-columns-and-its-data-type-in-a-table-via-sql-query

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!