테이블의 열 목록을 검색하려고합니다. 데이터베이스는 SQLite의 최신 릴리스 (3.6, 저는 믿습니다)입니다. SQL 쿼리로이 작업을 수행하는 코드를 찾고 있습니다. 열과 관련된 메타 데이터에 대한 추가 보너스 포인트 (예 : 길이, 데이터 유형 등)
테이블의 열 목록을 검색하려고합니다. 데이터베이스는 SQLite의 최신 릴리스 (3.6, 저는 믿습니다)입니다. SQL 쿼리로이 작업을 수행하는 코드를 찾고 있습니다. 열과 관련된 메타 데이터에 대한 추가 보너스 포인트 (예 : 길이, 데이터 유형 등)
답변:
당신이 찾고있는 것을 데이터 사전이라고합니다. sqlite에서는 sqlite_master 테이블 (또는 뷰?)을 쿼리하여 모든 테이블 목록을 찾을 수 있습니다.
sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)
열 정보를 얻으려면 다음 pragma table_info(table_name)
문을 사용할 수 있습니다 .
sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0
pragma 문에 대한 자세한 내용은 설명서를 참조하십시오 .
select * from
있습니까?
다음은 간단한 방법입니다.
.schema <table>
질문은 오래되었지만 다음은 아직 언급되지 않았습니다.
많은 경우에 또 다른 편리한 방법은 다음과 같이 헤더를 켜는 것입니다.
sqlite> .headers on
그때,
sqlite> SELECT ... FROM table
출력 상단에 선택한 모든 필드 (*를 선택하면 모두)를 보여주는 헤드 라인이 표시됩니다.
LIMIT 5
. ;
마지막에 잊지 마세요 .
다음은 현재 데이터베이스의 모든 테이블과 열을 나열하는 SELECT 문입니다.
SELECT m.name as tableName,
p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
on m.name <> p.name
order by tableName, columnName
;
ORDER BY
에를 tableName, p.cid
.
이것은 열과 함께 모든 테이블을 나열하는 쿼리이며 OP 요청에 따라 각 열에 대해 얻을 수있는 모든 메타 데이터를 보너스 포인트로 나열합니다.
SELECT
m.name AS table_name,
p.cid AS col_id,
p.name AS col_name,
p.type AS col_type,
p.pk AS col_is_pk,
p.dflt_value AS col_default_val,
p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id
pragma_table_info
쿼리 작업 방법을 보여준 @David Garoutte에게 감사드립니다 .
이 쿼리를 실행하여 모든 테이블 메타 데이터를 확인합니다.
SELECT * FROM sqlite_master WHERE type = 'table'
오랜 시간 이었지만 너무 늦지 않았습니다. TCL과 통역사로 비슷한 질문을했고 여러 번 검색 한 결과 나에게 좋은 것을 찾지 못했습니다. 그래서 나는 당신의 DB가“메인”이라는 것을 알고 PRAGMA를 기반으로 무언가를 제안합니다.
db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }
그리고 목록을 얻기 위해 배열 사용
set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list