MS SQL 2005 서버가 점점 많아지면서 진단시 기존의 2000과 쿼리명에 약간의 변경이 있습니다.
1. 테이블의 모든 계산 열(Computed Column) 찾기
1) SQL SERVER 2000
select name from syscolumns where id =object_id('TableName') and iscomputed=1
2) SQL SERVER 2005
select name from sys.computed_columns where object_id =object_id('TableName')
[참고]
SQL Server 2005에서는 계산된 열을 지속형(Persisited)으로 설정할 수 있습니다. 따라서, 지속형(Persisted)으로 설정되지 않은 계산된 열을 확인하기 위해서 다음과 같이 조건을 추가할 수 있습니다.:
select * from sys.computed_columns where is_persisted=0
2. ID열이 있는 테이블 목록 조사하기
1) SQL SERVER 2000
select object_name(id),name from syscolumns where columnproperty(id,name,'IsIdentity')=1
2) SQL SERVER 2005
select object_name(object_id),name from sys.identity_columns
[참고]
SQL Server 2005 에서는 id열의 가장 마지막 값을 별도로 저장합니다. 다음과 같은 쿼리를 이용해서 이를 확인할 수 있습니다..
select name,last_value from sys.identity_columns
3. 현재 Instance의 모든 데이터베이스 알아내기
1) SQL SERVER 2000
select name from master..sysdatabases
2) SQL SERVER 2005
select name from sys.databases
4. 데이터베이스의 모든 저장 프로시저 리스트 알아내기
1) SQL SERVER 2000
select name from sysobjects where type='P'
2) SQL SERVER 2005
select name from sys.procedures
[참고]
다음과 같은 조건으로 저장 프로시저가 복제에서 이용되는지 여부와 SQL Server가 시작할 때 자동으로 시작하는지의 여부를 확인할 수 있습니다.
select name from sys.procedures where is_execution_replicated=1
select name from sys.procedures where is_auto_executed=0
5. 데이터베이스의 모든 테이블 리스트 알아내기
1) SQL SERVER 2000
select name from sysobjects where type='U'
2) SQL SERVER 2005
select name from sys.tables
[참고] : 다음과 같은 조건으로 복제되는 테이블의 리스트를 확인할 수 있습니다.
select * from sys.tables where is_replicated =1
6. 데이터베이스의 모든 뷰 리스트 알아내기
1) SQL SERVER 2000
select name from sysobjects where type='V'
2) SQL SERVER 2005
select name from sys.views
7. 데이터베이스의 모든 트리거 리스트 알아내기
1) SQL SERVER 2000
select name from sysobjects where type='TR'
2) SQL SERVER 2005
select name from sys.triggers where parent_class=1
[참고]
다음과 같은 조건으로 어셈블리(CLR) 트리거와 SQL 트리거를 구분할 수 있습니다. (TA : 어셈블리 트리거, TR : SQL 트리거) 또한 After 트리거인지 Instead Of 트리거인지도 구분 가능합니다.
select name from sys.triggers where type='TA'
select name from sys.triggers where type='TR'
select name from sys.triggers where is_instead_of_trigger=1
8. 서버의 모든 로그인 리스트 알아내기
1) SQL SERVER 2000
select * from master..syslogins where isntgroup=0 and isntname=0
2) SQL SERVER 2005
select * from sys.sql_logins
9. 데이터베이스의 모든 SQL 개체에 대한 종속성 확인하기
1) SQL SERVER 2000
select * from sysdepends
2) SQL SERVER 2005
select * from sys.sql_dependencies
10. SQL Server의 모든 데이터 유형 확인하기
1) SQL SERVER 2000
select * from systypes
2) SQL SERVER 2005
select * from sys.systypes
11. SQL Server의 모든 에러 메시지 확인하기
1) SQL SERVER 2000
select * from master..sysmessages
2) SQL SERVER 2005
select * from sys.messages
12. 현재 데이터베이스의 데이터 파일 확인하기
1) SQL SERVER 2000
select name,filename from sysfiles
2) SQL SERVER 2005
select name, physical_name from sys.database_files
13. 현재 데이터베이스의 모든 인덱스의 유형 확인하기
1) SQL SERVER 2000
sysindexes 테이블의 indid 열을 이용해서 구분
2) SQL SERVER 2005
select object_name(object_id),name, type_desc from sys.indexes where type_desc ='CLUSTERED'
select object_name(object_id),name, type_desc from sys.indexes where type_desc ='HEAP'
select object_name(object_id),name, type_desc from sys.indexes where type_desc ='NONCLUSTERED'
select object_name(object_id),name, type_desc from sys.indexes where type_desc ='XML'