DB 목록 보기
--목록중에 시스템 데이터베이스는 제외시키기
--2000에서는 sysdatabases 2005에서는 sys.database 2005에서 sysdatabases 도 사용되지만 sysdatabases는
--단지 이전 버전과 호완을 위해 만들어 놓은 뷰라는것을 명심하자.
Select
[name] -- SQL Server 인스턴스내에 고유한 데이터베이스 이름
, [database_id] -- 데이터베이스 ID
, [collation_name] -- 데이터가 정렬될 문자셋(예: Korean_Wansung_CI_AS 또는 Latin1_General_CI_AS_KS_WS 등등)
, [user_access_desc] -- 사용자 액세스 설정 (예: MULTI_USER, SINGLE_USER 등등)
, [state_desc] -- 현재 데이터베이스 상태 (예: ONLINE, OFFLINE, RESTORING 등등)
, [recovery_model] -- 데이터베이스 복구 모델 (예: FULL, BULK_LOGGED, SIMPLE)
, [create_date] -- 데이터베이스가 생성되거나 이름이 변경된 날짜, tempdb경우 재부팅 될때마다 갱신
From Master.sys.databases
-- 시스템데이터베이스를 [name]말고도 database_id로 검색해도 좋다.
-- database_id가 1 = master, 2 = tempdb, 3 = model, 4 = msdb 이다.
Where [name] not in ('master', 'tempdb', 'model', 'msdb')
Order by database_id
[참고] http://technet.microsoft.com/ko-kr/library/ms178534.aspx
DB에 존재하는 Table 목록 보기
Select
[name] -- 이름
, [type_desc] -- 개체 유형에 대한 설명 (예: USER_TABLE, VIEW등등)
, [create_date] -- 만든 날짜
, [modify_date] -- ALTER 문을 사용하여 수정한 날짜
-- 주의! 클러스터 인덱스를 만들거나, 필드명을 수정하거나, 필드타입을 수정할 경우
-- SQL 내부적으로 table의 내용을 tempdb 로 이동했다가 table 삭제 후 다시 만들기 때문에
-- create_date도 같이 바뀐다.
From master.sys.objects Where [type] = 'U'
Table 변경 사항 감지
-- 2000의 경우에는 schema_ver 필드를보고 변경판단을 하였고,
-- 2005의 경우에는 modify_date 필드를보고 변경판을 하여야 한다.
-- 하지만, 무엇이 어떻게 바뀌었는지는 알지 못한다.
-- 해서~~~ 뒤 포스터에 2000용과 2005용 테이블 변경을 체크하여 변경 테이블 내용을 저장시키는 것을 만들었다.
-- 2008버전에는 SSMS 지가 지원한다.. -0-;
Table - Columns
Select
obj.name As [TableName]
, col.name As [TableFieldName]
, type_name(user_type_id) + (
Case
When type_name(user_type_id) = 'varchar'
or type_name(user_type_id) = 'nvarchar'
or type_name(user_type_id) = 'char'
or type_name(user_type_id) = 'nchar'
Then '(' + cast(max_length As varchar) + ')'
When type_name(user_type_id) = 'decimal'
Then '(' + cast([precision] As varchar) + ',' + cast(scale As varchar) + ')'
End
) As [TableFieldValue]
, Case When is_nullable = 1 Then 'Y' Else 'N' End As [TableFieldPK]
, IsNull(cast(p.value As varchar(4000)), '-') As [TableFieldText]
From sys.columns As col Inner Join sys.objects As obj
On col.[object_id] = obj.[object_id] left outer join sys.extended_properties As p
On p.[major_id] = col.[object_id] And p.[minor_id] = col.[column_id] And p.[name] = 'MS_Description'
Where obj.[type] = 'U' And obj.[name] = 'Table명'

Stored Procedure Query
--해당 DB의 모든 사용자 프로시저가 출력된다.
Select
, [name] -- 개체 이름
, [type_desc] -- 개체 타입 (프로시저를 검색했으니 SQL_STORED_PROCEDURE)
, [create_date] -- 개체 만든 날짜
, [modify_date] -- 개체 수정 날짜
From master.sys.objects Where type = 'P'
Stored Procedure 목록, Stored Procedure 내용
-- 해당 DB의 모든 사용자 프로시저 및 그 프로시저의 내용이 출력된다.
-- 2000에서는 syscomments를 쓰지만 2005에서는 sys.sql_modules를 사용한다.
-- syscomments를 쓸수는 있지만, 이것은 이전 버전과 호환을 위해 존재하는 뷰이기 때문에 sys.sql_modules 사용바란다.
Select
so.[name]
, sc.[definition]
From master.sys.objects As so Inner Join sys.sql_modules As Sc
On so.[object_id] = sc.[object_id]
Where so.[type] = 'P'
sys.object의 type 정의
AF = 집계 함수(CLR)
C = CHECK 제약 조건
D = DEFAULT(제약 조건 또는 독립 실행형)
F = FOREIGN KEY 제약 조건
PK = PRIMARY KEY 제약 조건
P = SQL 저장 프로시저
PC = 어셈블리(CLR) 저장 프로시저
FN = SQL 스칼라 함수
FS = 어셈블리(CLR) 스칼라 함수
FT = 어셈블리(CLR) 테이블 값 함수
R = 규칙(이전 스타일, 독립 실행형)
RF = 복제 필터 프로시저
S = 시스템 기본 테이블
SN = 동의어
SQ = 서비스 큐
TA = 어셈블리(CLR) DML 트리거
TR = SQL DML 트리거
IF = SQL 인라인 테이블 값 함수
TF = SQL 테이블 값 함수
U = 테이블(사용자 정의)
UQ = UNIQUE 제약 조건
V = 뷰
X = 확장 저장 프로시저
IT = 내부 테이블
-- 2000의 sysobjects의 xtype는 16개 이지만, 2005에 sys.objects의 xtype은 24개이다.
[참고] http://technet.microsoft.com/ko-kr/library/ms190324.aspx