INFORMATION_SCHEMA.COLUMNS 의 존재를 알게된 후 그냥 만들어 놓으면 편할 것 같아서.
원래 테이블 명세서라는게 프로젝트 개발 전에 모두 완료되어 하지만.. 현실은 그렇지 않음.. 쿨럭.
2. 주의점
화일 소스에 DB 접속정보가 있으니 보안에 조심조심..
3. 장점
현재 DB 의 DB 명세서를 한방에 만들 수 있다.
4. 단점
ms-sql 에서만 테스트 했슴. 다른 DB 는 모름.
5. 사용방법
접속 정보 입력하고 실행만 하면 됨.
6. 사용된 쿼리구문..
select
t_columns.table_catalog,
t_columns.table_name,
t_columns.column_name,
t_columns.ordinal_position,
t_columns.column_default,
t_columns.is_nullable,
t_columns.data_type,
t_columns.character_maximum_length,
t_columns.is_nullable,
case when t_columns.column_name=isnull(t_column_usage.column_name,'') and t_table_const.constraint_type='PRIMARY KEY' then 'Y' else ' ' end as PK,
case when t_columns.column_name=isnull(t_column_usage.column_name,'') and t_table_const.constraint_type='FOREIGN KEY' then 'Y' else ' ' end as FK,
case when t_columns.column_name=isnull(t_column_usage.column_name,'') and t_table_const.constraint_type='FOREIGN KEY' then
(SELECT
PK_Table = PK.TABLE_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN
(
SELECT
i1.TABLE_NAME, i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME and C.CONSTRAINT_NAME=t_table_const.CONSTRAINT_NAME
)
else ' ' end as FK_table ,
case when t_columns.column_name=isnull(t_column_usage.column_name,'') and t_table_const.constraint_type='FOREIGN KEY' then
(SELECT
PK_Column = PT.COLUMN_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN
(
SELECT
i1.TABLE_NAME, i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME and C.CONSTRAINT_NAME=t_table_const.CONSTRAINT_NAME
)
else ' ' end as FK_column
FROM
INFORMATION_SCHEMA.COLUMNS t_columns left outer join INFORMATION_SCHEMA.KEY_COLUMN_USAGE t_column_usage
on t_columns.TABLE_NAME+t_columns.column_name=t_column_usage.TABLE_NAME+t_column_usage.column_name
left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS t_table_const
on t_column_usage.constraint_name=t_table_const.constraint_name
order by
t_columns.table_name,t_columns.ordinal_position
'dev > webDev' 카테고리의 다른 글
javascript 소스 정렬해 주는 사이트. (0) | 2012.05.03 |
---|---|
파이어폭스 레이어구조 3D로 보기.. (0) | 2012.04.25 |
홈페이지 제작시 개발팀에서 해야할 정책 정리. (0) | 2011.11.30 |
ipin, 실명인증시 중복가입 방지를 위한 개발내용 순서도. (0) | 2011.10.23 |
홈페이지 각 페이지에 자동으로 QR Code 넣기. (0) | 2011.02.15 |