MS-SQL 2008 ] 테이블 정보 쿼리!
전에 만들어둔게 있었는데....
문제가 조금 있으니 쿼리를 수정함...
이 프로시져는 등록한 데이타 베이스에서만 사용이 가능하다.
전체 DB에서 사용할 수 있는 방법을 찾아봐야겠다.
-- TAG 검색 되게 PRMS, prms
수정 PK , FK ... 정보 출력.
/*
작성자 : 윤지송
테이블 컬럼의 속성 보는 쿼리!!
SqlManagement Studio에 도구 -> 옵션 -> 일반탭 : 키보드
매크로 지정하는 화면에서
키에 exec SP_TABLE_COLUMN_INFO 를 입력해두고...
쿼리실행창에서 보고싶은 테이블이름 셀렉팅 하고 매크로 키를 누르면 프로시져가 실행되어진다.
단, 키등록후 매니져를 껐다 켜야 되드랑!!
*/
ALTER PROC DBO.SP_TABLE_COLUMN_INFO
(
@TABLENAME nvarchar(776) = NULL
)
AS
select distinct
c.object_id , c.name,
ltrim( rtrim( case when isnull( index_col( @TABLENAME , i.index_id, C.column_id ),'') <> '' then 'PK' else '' end + ' '+
case when isnull( f.constraint_column_id , '' ) <> '' then 'FK' else '' end )) as [KEY] ,
isnull(e.value,'') ExName , isnull( t.name ,'') TypeName,
c.COLUMN_ID,
CONVERT( VARCHAR, c.NAME ) AS[NAME],
UPPER(t.NAME) AS [DTYPE] ,
CASE WHEN UPPER(t.NAME) IN ('CHAR','VARCHAR','NVARCHAR','NCHAR','TEXT' ) THEN CASE c.MAX_LENGTH WHEN -1 THEN '(MAX)'
ELSE '('+ CONVERT( VARCHAR, c.MAX_LENGTH / ( CASE WHEN LEFT(t.NAME,1) = 'N' THEN 2 ELSE 1 END ) ) +')'
END
WHEN UPPER(t.NAME) IN ('NUMERIC','DECIMAL' ) THEN '('+ CONVERT(VARCHAR, c.PRECISION) + ',' + CONVERT(VARCHAR, c.SCALE)+')'
ELSE ''
END AS [LEN],
'-- ' + isnull( CONVERT( VARCHAR, e.VALUE ) , c.Name ) AS [DESC],
'@'+CONVERT( VARCHAR, c.NAME )+' ' + UPPER(t.NAME) + CASE WHEN UPPER(t.NAME) IN ('CHAR','VARCHAR','NVARCHAR','NCHAR') THEN CASE c.MAX_LENGTH WHEN -1 THEN '(MAX)'
ELSE '('+ CONVERT( VARCHAR, c.MAX_LENGTH / ( CASE WHEN LEFT(t.NAME,1) = 'N' THEN 2 ELSE 1 END ) ) +')'
END
WHEN UPPER(t.NAME) IN ('NUMERIC','DECIMAL' ) THEN '('+ CONVERT(VARCHAR, c.PRECISION) + ',' + CONVERT(VARCHAR, c.SCALE)+')'
ELSE ''
END +
', -- ' + isnull( CONVERT( VARCHAR, e.VALUE ) , '') AS PROC_PRMS,
'@'+CONVERT( VARCHAR, c.NAME + ',' ) AS [PRMS] ,
'AND' AS [AND],
CONVERT( VARCHAR, c.NAME + ' = ' ) + '@'+CONVERT( VARCHAR, c.NAME ) AS [WPRMS]
,
'' as [' 공백 ']
,c.*
from sys.columns c left outer join sys.extended_properties e
on c.Object_id = e.MAJOR_ID and c.Column_Id = e.Minor_id and e.CLASS = 1
left outer join SYS.TYPES t
on c.SYSTEM_TYPE_ID = t.SYSTEM_TYPE_ID AND t.NAME <> 'SYSNAME'
left outer join sys.index_columns i
on c.object_id = i.object_id and c.column_id = i.column_id
left outer join sys.foreign_key_columns f
on c.object_id = f.parent_object_id and c.column_id = f.parent_column_id
where c.Object_id = OBJECT_ID( @TABLENAME )
ORDER BY C.column_id
SELECT OBJECT_ID(OBJNAME) OBJECT_ID , objtype, objname , name, value
FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', @TABLENAME, default, default)
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
MS-SQL 2008 ] 확장속성을 컬럼명으로. 한 QUERY SP.. (0) | 2011.10.06 |
---|---|
MS-SQL 2008 ] 테이블 컬럼 확장속성으로 설명 추가할 수 있는 도움 쿼리 (0) | 2011.10.04 |
[MS-SQL] 쿼리로 도메인 명 가져오기 . (0) | 2011.05.02 |
[MS-SQL] 합계 쿼리. (0) | 2011.03.21 |
[MS-SQL] CTE 로 부서 이하직원들 불러올리는 쿼리... (0) | 2011.01.05 |