SQL Server의 특정 데이터베이스에있는 모든 테이블의 이름을 얻는 가장 좋은 방법은 무엇입니까?
SHOW TABLES
작업 (MySQL의에서 사용)?
SQL Server의 특정 데이터베이스에있는 모든 테이블의 이름을 얻는 가장 좋은 방법은 무엇입니까?
SHOW TABLES
작업 (MySQL의에서 사용)?
답변:
SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 또는 2019 :
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
특정 데이터베이스의 테이블 만 표시하려면
SELECT TABLE_NAME
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
또는,
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )
PS : SQL Server 2000의 경우 :
SELECT * FROM sysobjects WHERE xtype='U'
WHERE TABLE_TYPE='BASE TABLE'
하면 기본 테이블 만 포함되며 확장을 통해 항상 사용할 수 있습니다 WHERE TABLE_TYPE != 'VIEW'
.
AND name <> 'sysdiagrams'
.
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
검색 할 수있는 다른 객체 유형 목록은 다음과 같습니다.
SELECT name FROM sysobjects WHERE xtype = 'U'
동일한 작업을 수행합니다.
'U'
아마도 사용자 테이블을 식별하는 데 왜 사용 되는지 궁금해 할 것입니다 ... 어쩌면 'UT'
또는 가장 직관적 인 것과는 대조적으로 'T'
... 아, 잘 작동합니다!
단점은 INFORMATION_SCHEMA.TABLES
테이블과 같은 시스템 테이블도 포함하고 dtproperties
있으며, MSpeer_...
테이블과 구별 할 수있는 방법이 없다는 것입니다.
시스템 테이블 제외를 지원 sys.objects
하는 (더 이상 사용되지 않는 sysobjects 뷰 의 새 버전)을 사용 하는 것이 좋습니다 .
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
SSMS에서 특정 데이터베이스의 모든 정규화 된 테이블 이름을 가져 오려면 (예 : "MyDatabase") :
SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM MyDatabase.INFORMATION_SCHEMA.Tables
WHERE [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]
결과 :
sys.objects 를 사용 하여 모든 데이터베이스 객체를 얻을 수 있습니다 .
GO
select * from sys.objects where type_desc='USER_TABLE' order by name
GO
또는
-- For all tables
select * from INFORMATION_SCHEMA.TABLES
GO
--- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO
--- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO
사용 SELECT * FROM INFORMATION_SCHEMA.COLUMNS
하면 모든 테이블과 관련 열이 표시됩니다.