테이블 코멘트 가져오는 방법입니다.

(현재 SQL Server 버전: 2017)

SELECT T.name AS TableName, TC.value AS TableComment
FROM sys.tables AS T
INNER JOIN
(
SELECT object_id(objname) AS objectId, value FROM ::fn_listextendedproperty(null, 'User', 'dbo', 'table', null, null, null)
) AS TC
ON T.object_id = TC.objectId
WHERE T.lob_data_space_id = 0

sys.tables 에는 테이블 정보가 들어있습니다.


::fn_listextendedproperty 테이블 반환함수를 통해 해당테이블의 코멘트를 가져옵니다.


sys.tables 테이블의 lob_data_space_id 컬럼은 테이블의 형태를 구분하기 위한 것입니다.


컬럼명의 lob_data를 잠시 살펴보겠습니다.


우리가 가끔 사용하는 textntextimagexmlvarchar(max)nvarchar(max)varbinary(max)

등 lob 형태의 컬럼형식들이 있습니다.


그런데, Large Object는 컬럼에만 사용하는 것이 아니라 테이블에도 사용이 가능합니다.


결국 테이블을 Large Object 형식으로 생성하는 것입니다.


데이터베이스 다이어그램을 보시면 ER-Diagram 형태로 테이블 및 컬럼을 보여주는데요.


각각의 다이어그램들이 LOB형태의 테이블로 DB내에 저장됩니다.


LOB 테이블들은 sys.tables로 조회하면 lob_data_space_id 컬럼값이 1입니다.


일반 테이블들은 0이구요.


그래서 일반 테이블의 코멘트만 가져오기 위해 lob_data_space_id 컬럼값으로 조건절을 사용합니다.


다음은 MSDB 시스템데이터베이스의 테이블들을 조회한 결과입니다. (전체테이블 : 145 중 일부)






'SQL Server 2017' 카테고리의 다른 글

테이블 코멘트 가져오기  (0) 2018.02.03

+ Recent posts