TSQL을 사용하여 데이터베이스의 모든 테이블 목록을 어떻게 얻습니까?


895

SQL Server의 특정 데이터베이스에있는 모든 테이블의 이름을 얻는 가장 좋은 방법은 무엇입니까?




3
합니까 SHOW TABLES작업 (MySQL의에서 사용)?
Martin Thoma

답변:


1429

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' 

46
여기에는 테이블뿐만 아니라 뷰도 포함됩니다.
Nathan Koop

17
특정 데이터베이스를 사용하지 않는 경우 데이터베이스 이름을 추가하여 <DATABASE_NAME>에서 SELECT TABLE_NAME FROM <DATABASE_NAME>이되도록하십시오. INFORMATION_SCHEMA.Tables
Shriroop

22
추가 WHERE TABLE_TYPE='BASE TABLE'하면 기본 테이블 만 포함되며 확장을 통해 항상 사용할 수 있습니다 WHERE TABLE_TYPE != 'VIEW'.
Phillip Copley

3
"sysdiagrams는":(도이 목록에 나타납니다
celsowm

4
sysdiagrams는 일반 테이블이므로 항상로 수동으로 제외해야합니다 AND name <> 'sysdiagrams'.
Christoph

199
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

검색 할 수있는 다른 객체 유형 목록은 다음과 같습니다.

  • AF : 집계 기능 (CLR)
  • C : CHECK 제약
  • D : 디폴트 또는 DEFAULT 제약
  • F : 외래 키 제약
  • L : 로그
  • FN : 스칼라 함수
  • FS : 어셈블리 (CLR) 스칼라 함수
  • FT : 어셈블리 (CLR) 테이블 반환 함수
  • IF : 인라인 테이블 함수
  • IT : 내부 테이블
  • P : 저장 프로 시저
  • PC : 조립 (CLR) 저장 프로 시저
  • PK : PRIMARY KEY 제약 조건 (유형은 K)
  • RF : 복제 필터 저장 프로 시저
  • S : 시스템 테이블
  • SN : 동의어
  • SQ : 서비스 대기열
  • TA : 어셈블리 (CLR) DML 트리거
  • TF : 테이블 함수
  • TR : SQL DML 트리거
  • TT : 테이블 유형
  • U : 사용자 테이블
  • UQ : UNIQUE 제약 조건 (유형은 K)
  • V :보기
  • X : 확장 저장 프로 시저

9
앨리어싱은 약간 중복됩니다. SELECT name FROM sysobjects WHERE xtype = 'U'동일한 작업을 수행합니다.
PJSCopeland 2016 년

감사합니다. 처음에 PK,FK,D,C,V,UQ소스와 대상 데이터베이스를 비교 하기 위해 etc에 대한 여러 select 문으로 이것을 시도했지만 VS 에서이 기능을 찾았 지만 sql query완전한 소스와 대상 데이터베이스를 비교할 수는 없습니까?
shaijut

'U'아마도 사용자 테이블을 식별하는 데 왜 사용 되는지 궁금해 할 것입니다 ... 어쩌면 'UT'또는 가장 직관적 인 것과는 대조적으로 'T'... 아, 잘 작동합니다!
user919426

87
SELECT * FROM INFORMATION_SCHEMA.TABLES 

또는

SELECT * FROM Sys.Tables

5
(다른 답변에서 언급했듯이) sys.tables는 2005 년 이후에만 사용 가능합니다
Rob

2
나는 이것이 더 높아야한다고 생각합니다 :-)
Michal B.

29
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

또는

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO



9
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000 표준. 여전히 SQL Server 2005에서 지원됩니다.)



6
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams'; 왜냐하면 Microsoft SQL Server Management Studio에 의해 생성되었지만 sysdiagrams 테이블은 기술적으로 시스템 테이블이 아니라 일반적으로 제외하려는 테이블이기 때문입니다.
Christoph

5

단점은 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

2

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]

결과 :

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • 기타

2

이것을 사용하십시오. 스키마 이름과 함께 테이블 이름을 얻게됩니다.

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

1
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

1

응답이 데이터베이스의 모든 사용자 테이블을 제공하는 Ray Vega 덕분에 ...

exec sp_msforeachtable 'print' '?' ''

sp_helptext는 다음과 같은 기본 쿼리를 보여줍니다.

select * from dbo.sysobjects o 
join sys.all_objects syso on o.id =  syso.object_id  
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 
and o.category & 2 = 0 

1

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

0
--for oracle
select tablespace_name, table_name from all_tables;

이 링크는이 주제 에 대한 더 많은 정보를 제공 할 수 있습니다


2
이것은 SQL Server 용이 아니므로이 질문에 대한 답변이 아닙니다.
Dan Getz

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.