본문 바로가기

DBMS/SQL Server (MS-SQL)

[SQL Server / MS-SQL] 특정컬럼이 포함된 테이블 조회

반응형

 


 

 

수많은 테이블을 가지고 있는 데이터베이스에서 원하는 컬럼이 포함된 테이블들만 조회하고 싶을 때,

아래의 시스템 테이블들을 이용하여 조회할 수 있다.

1
2
3
4
SELECT a.name AS 테이블명, b.name AS 컬럼명  
FROM sys.tables a 
INNER JOIN sys.columns b ON a.object_id = b.object_id  
WHERE b.name = '원하는컬럼명'
 
cs

 

 

 

 

예를 들어 보자.

bank 라는 데이터베이스에서 gold 라는 컬럼을 가진 테이블을 모두 조회하고 싶다.

이럴 경우 아래와 같이 조회 할 수 있다.

1
2
3
4
5
6
7
8
-- bank 데이터베이스로 이동 
USE bank 
 
-- gold 라는 컬럼을 가진 모든 테이블 조회 
SELECT a.name AS 테이블명, b.name AS 컬럼명  
FROM sys.tables a 
INNER JOIN sys.columns b ON a.object_id = b.object_id  
WHERE b.name = 'gold'
 
cs

 

[조회 결과]

테이블명 컬럼명
saving_tbl gold
deposit_tbl gold

 

 

 

만약 원하는 컬럼명을 정확히 모를 경우에는 like 를 사용해서 조회할 수도 있다.

1
2
3
4
SELECT a.name AS 테이블명, b.name AS 컬럼명  
FROM sys.tables a 
INNER JOIN sys.columns b ON a.object_id = b.object_id  
WHERE b.name LIKE '%원하는컬럼명%'
cs

 

LIKE 절의 % 는 아무 문자나 올 수 있다는 뜻이다.

즉, gold 라는 문구를 포함하고 앞 뒤로 아무 문자나 올 수 있다는 말이다.

 

 

 

예를 들어보자.

역시나 bank 라는 데이터베이스에서 특정컬럼을 가진 모든 테이블을 조회하고 싶다.

근데 컬럼명에 gold 라는 문구가 들어가는데 정확하지 않다.

 

이럴 경우 아래와 같이 조회할 수 있다.

1
2
3
4
5
6
7
8
-- bank 데이터베이스로 이동 
USE bank 
 
-- gold 라는 문자를 포함한 컬럼을 가진 모든 테이블 조회 
SELECT a.name AS 테이블명, b.name AS 컬럼명  
FROM sys.tables a 
INNER JOIN sys.columns b ON a.object_id = b.object_id  
WHERE b.name LIKE '%gold%'
cs

 

[조회 결과]

테이블명 컬럼명
user_tbl bank_gold
saving_tbl gold
deposit_tbl gold
loan_tbl gold_loan

 

 

이렇게 gold 라는 문자를 포함하며 앞 뒤로 다른 문자가 있는 컬럼명을 가진 모든 테이블을 조회할 수 있다.

 

 

반응형