2014. 2. 3. 18:43


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



Posted by 펀펀