본문 바로가기
프로그래밍/MS-SQL

모든 테이블 중 특정하여 자료 검색하기

특정한 컬럼이름을 가진 테이블을 조회하고

해당 테이블들을 모두 조회하기.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
USE [DATABASE_NAME]    --데이터베이스 이름
 
DECLARE @TABLE    NVARCHAR(50= '',
        @COLUMN NVARCHAR(50= '',
        @ROWC    INT    = 9999,
        @ANS    NVARCHAR(50= '',
        @QUR    NVARCHAR(999= ''
 
    --LIKE %컬럼이름%을 만족하는 컬럼을 가진 모든 테이블 조회
    SELECT ROW_NUMBER() OVER (ORDER BY B.NAME) [ROW_NUM], B.NAME [TABLENM], A.NAME [COLUMNNM],
           TYPE_NAME(A.system_type_id) [TYPE_NM], A.SYSTEM_TYPE_ID [TYPE_CD]
      INTO #TEMP_TABLE
      FROM SYS.COLUMNS A
      LEFT JOIN SYS.OBJECTS B ON A.OBJECT_ID = B.OBJECT_ID
     WHERE A.NAME LIKE '%컬럼이름%'
       AND A.SYSTEM_TYPE_ID IN (167231)    --VARCHAR와 NVARCHAR 타입의 컬럼만 조회
     ORDER BY B.NAME
     
       SET @ROWC = @@ROWCOUNT
 
--검색된 자료를 가지고 모든 테이블 검색
WHILE @ROWC > 0
BEGIN
    SELECT @TABLE = TABLENM, @COLUMN = COLUMNNM
      FROM #TEMP_TABLE
     WHERE ROW_NUM = @ROWC
 
      --실행. 검색할 조건 ㅓㄹ정
      EXEC ('SELECT ' + @COLUMN + ', ''' + @TABLE + ''' FROM ' + @TABLE + ' WHERE ' + @COLUMN + ' = ''검색할 조건''');
    
    IF @@ROWCOUNT > 0
        SET @ANS = @TABLE    --해당하는 테이블이름을 저장
 
    SET @ROWC = @ROWC - 1
END
 
SELECT @ANS
 
DROP TABLE #TEMP_TABLE
 
cs