SQL 쿼리로 특정 데이터베이스의 모든 테이블 이름을 가져 옵니까?
"MySQL"및 "MS SQL Server"와 같은 여러 데이터베이스 서버를 처리 할 수있는 응용 프로그램을 작업 중입니다.
모든 데이터베이스 유형에 적합한 일반 쿼리를 사용하여 특정 데이터베이스의 테이블 이름을 가져오고 싶습니다. 나는 다음을 시도했다.
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
그러나 특정 서버의 모든 데이터베이스의 테이블 이름을 제공하지만 선택한 데이터베이스의 테이블 이름 만 가져 오려고합니다. 특정 데이터베이스의 테이블을 가져 오려면이 쿼리를 어떻게 제한 할 수 있습니까?
다른 SQL dbms가 스키마를 처리하는 방식 때문일 수 있습니다.
다음을 시도하십시오
SQL Server의 경우 :
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'
MySQL의 경우 :
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName'
Oracle의 경우 동등한 사용하는 것이 좋습니다 DBA_TABLES
.
여기 에서 도난당한 :
USE YOURDBNAME
GO
SELECT *
FROM sys.Tables
GO
다음 쿼리는 Tables
데이터베이스에서 모든 이름을 선택합니다 DBName
.
USE DBName
GO
SELECT *
FROM sys.Tables
GO
USE DBName;
SELECT * FROM sys.Tables;
우리는 GO
세미콜론을 사용할 수 있습니다 ;
.
그냥 DATABASE NAME
앞에 넣어 INFORMATION_SCHEMA.TABLES
:
select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'
mysql에서 다음을 사용하십시오.
SHOW TABLES;
다음을 사용하여 DB를 선택한 후 :
USE db_name
나는이 대답을 보지 못했지만 이것이 내가하는 일이다.
SELECT name FROM databaseName.sys.Tables;
select * from sys.tables
order by schema_id --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go
MySQL의 경우 간단하게 할 수 있습니다. 쇼 테이블;
Exec sp_MSforeachtable 'Select ''?'''
MSSQL 서버의 최신 버전 업데이트 (17.7)
SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'
또는 SELECT *
모든 열을 가져옵니다.
예 오라클은 :
select * from user_tables
즉, 로그인 user/schema
한 사용자가 소유 한 객체 만 원하는 경우 시스템 테이블을 포함 all_tables
하거나 사용할 수 있습니다 dba_tables
.
Michael Baylon의 답변을 바탕으로 스키마 정보가 포함 된 목록이 필요했으며 이것이 쿼리를 수정 한 방법입니다.
SELECT TABLE_SCHEMA + '.' + TABLE_NAME as 'Schema.Table'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'dbName'
ORDER BY TABLE_SCHEMA, TABLE_NAME
USE dbName;
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME
MS SQL 서버에서 여러 스키마를 사용하는 경우 동시에 TABLE_SCHEMA를 선택하지 않고 SELECT-ing TABLE_NAME을 사용하면 이점이 제한 될 수 있으므로 MS SQL Server를 사용할 때 알려진 스키마에 속하는 테이블에 관심이 있다고 가정했습니다.
필자의 SQL Server 데이터베이스를 사용하는 SQL Server Management Studio와 MySQL 데이터베이스를 사용하는 MySQL Workbench를 사용하여 위의 쿼리를 테스트했으며 두 경우 모두 테이블 이름을 제공합니다.
쿼리는 Michael Baylon의 두 가지 다른 쿼리를 하나의 데이터베이스 형식으로 실행할 수있는 쿼리로 구성합니다. WHERE 절의 첫 번째 부분은 MySQL 데이터베이스에서 작동하고 두 번째 부분 (OR 후)은 MS SQL Server 데이터베이스에서 작동합니다. 데이터베이스와 이름이 같은 원하지 않는 스키마가 없다고 가정하기 때문에 추악하고 논리적으로 약간 잘못되었습니다. 이것은 데이터베이스 서버에서 실행할 수있는 하나의 단일 쿼리를 찾는 사람에게 도움이 될 수 있습니다.
'Programing' 카테고리의 다른 글
파이썬에서 datetime.date를 UTC 타임 스탬프로 변환 (0) | 2020.03.24 |
---|---|
PHP는 클래스없이 객체를 생성한다 (0) | 2020.03.24 |
팬더 데이터 프레임에서 인덱스를 재설정하는 방법은 무엇입니까? (0) | 2020.03.24 |
Wireshark에서 IP 주소로 필터링하는 방법? (0) | 2020.03.24 |
색상 그라디언트로 프로그래밍 방식으로 UIView 만들기 (0) | 2020.03.23 |