초기에 DB 스키마를 설계하고 개발이 진행되거나, 혹은 DB 관리 시
점점 늘어만 가는 Table과 Procedure, Function 에서 내가 수정해야 하는 것을
딱 집어서 가져오기가 힘겨워 진다.
그래서 알게 된 것이 System Table 과 System Procedure를 이용 하는 것이다.
(오... 이런게 있었어...ㅠㅠ, 사실 안 지는 좀 됐지만, 정리해 놓는 것이 귀찮았음.)
Management Studio에서 필터를 사용 했지만,
마우스로 손이 가서 일일이 내용에 맞는 필터를 사용하는 귀찮음이란...ㅠㅠ
(그래도 그것이 전부 인 줄 알았었다.)
그러다가 알게 된 것이 System Table...
'SYSOBJECTS 이거 좀 뒤벼보면 뭔가 나오겠구나~~~!'
아니나 다를까... 많은 분들이 사용 하고 계시더군...
나만 몰랐어...ㅠㅠ
이것이 현재 내가 사용 하는 가장 유용하고 짭짤한 프로시저 이다.
-- [프로시저 이름으로 프로시저/함수 내용 가져오기] -- * 프로시저 이름 : sp_helptext -- * 프로시저 내용 : System Procedure -- * 사용 방법 exec sp_helptext [Procedure Name]
프로시저/함수 이름만 알면, 내용 전체를 주욱 가져 올 수 있다. 참 좋군...
그럼 이런 질문이 나올 것이다.
질문자 : "그렇다면, 프로시저/함수의 전체 이름을 알아야 사용 할 수 있는 거야...?"
답변자 : "네.. 그렇지요!"
질문자 : "아놔 그럼 그것을 어떻게 다 기억 하고 있니...?"
답변자 : "..."
그래서 이제 부터 필요한 것이...
위에서 언급한 SYSOBJECTS를 검색해서 원하는 것들을 찾는 방법이다.
MSDN에서 sysobjecets를 검색하면...
http://msdn.microsoft.com/en-us/library/ms177596.aspx (영문)
http://msdn.microsoft.com/ko-kr/library/ms177596(SQL.90).aspx (한글)
흠... 자세한 사항은 읽어보시고...
한 가지 주의를 해서 볼 사항은 sys.objects 이다.
sysobjects는 호환성 뷰일 뿐이고~~~!
"제대로 볼라면 objects로 보시오."
그건 일단 나중에 함 살펴 보고...
http://msdn.microsoft.com/en-us/library/ms190324.aspx (영문)
http://msdn.microsoft.com/ko-kr/library/ms190324(SQL.90).aspx (한글)
그리 하여 첫 번째로 내가 만들어서 사용할 쿼리는 특정 단어를 포함 하는 테이블 찾기.
-- [제목에 특정 단어가 포함 된 테이블 찾기] -- * 사용 방법 SELECT name FROM DBO.SYSOBJECTS WHERE xtype = 'U' and name like '%'+[특정 단어]+'%' ORDER BY name여기에서 주목 할 점은 xtype 이다.
'U'는 사용자 정의 테이블 이란 뜻이다.
즉, 타입으로 구분하여 사용한다는 것.
개체 유형(object type)은 다음과 같다.
FN = SQL 스칼라 함수
P = SQL 저장 프로시저
AF = 집계 함수(CLR)
C = CHECK 제약 조건
D = DEFAULT(제약 조건 또는 독립 실행형)
F = FOREIGN KEY 제약 조건
PK = PRIMARY KEY 제약 조건
PC = 어셈블리(CLR) 저장 프로시저
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 = 내부 테이블
위 쿼리와 응용하여
-- [제목에 특정 단어가 포함 된 프로시저 찾기] -- * 사용 방법 SELECT name FROM DBO.SYSOBJECTS WHERE xtype = 'P' and name like '%'+[특정 단어]+'%' ORDER BY name -- [제목에 특정 단어가 포함 된 스칼라 함수 찾기] -- * 사용 방법 SELECT name FROM DBO.SYSOBJECTS WHERE xtype = 'FN' and name like '%'+[특정 단어]+'%' ORDER BY name
요로코럼 만들고 이것을 프로시저로 만들어서
사용 한다면 완전 편하다.
이렇게만 이용하면, 뭔가가 아쉽다.
바로 내용 검색이다.
내용에 특정 단어가 포함 된 프로시저 및 함수가 찾고 싶을 때가 있을 것이다.
이때는 syscomments와 조인 하여 검색 하면 해당 프로시저를 찾을 수가 있을 것이다.
http://msdn.microsoft.com/en-us/library/aa260393.aspx (영문)
http://msdn.microsoft.com/ko-kr/library/ms186293(SQL.90).aspx (한글)
여기서 중요한 점 또 발견 한 것이... sys.sql_modules.
이것 역시 나중에 시간 날 때... 고고싱~~~! 관련 링크는 다음과 같다.
http://msdn.microsoft.com/en-us/library/ms175081.aspx (영문)
http://msdn.microsoft.com/ko-kr/library/ms175081(SQL.90).aspx (한글)
-- [내용에 특정 단어가 포함 된 프로시저 찾기] -- * 사용 방법 SELECT DBO.SYSOBJECTS.name FROM DBO.SYSOBJECTS, DBO.SYSCOMMENTS WHERE DBO.SYSOBJECTS.id = DBO.SYSCOMMENTS.id and DBO.SYSOBJECTS.[type] = 'P' and DBO.SYSCOMMENTS.[text] like '%'+[특정 단어]+'%' ORDER BY DBO.SYSOBJECTS.name -- [내용에 특정 단어가 포함 된 스칼라 함수 찾기] -- * 사용 방법 SELECT DBO.SYSOBJECTS.name FROM DBO.SYSOBJECTS, DBO.SYSCOMMENTS WHERE DBO.SYSOBJECTS.id = DBO.SYSCOMMENTS.id and DBO.SYSOBJECTS.[type] = 'FN' and DBO.SYSCOMMENTS.[text] like '%'+[특정 단어]+'%' ORDER BY DBO.SYSOBJECTS.name
이 외에도 여러 형태로 입맛에 맞게 만들어서 사용 하면
삽질 시간이 많이 줄어들 듯 하다.
p.s 1 : MS-SQL의 버전이 올라가면서 시스템 테이블을 숨기고,
이것을 뷰로 제공함으로써 보안을 강화 한 것 같다.
왜 그렇게 했는지는 시간 날 때 뒤져 봐야 할 듯...
p.s 2 : 글 하나 쓰고 지쳐버림... gg...
팀 오라일리 아자씨가 무슨 생각으로 그렇게 정의를 했는지는 자세히 보지는 않았다.
(물론, 그 이전에 선지자들은 있었고, 다만 저 분은 비교 분석 후 제안 한 것 뿐이지만 그렇다고 해서 그의 업적을 무시하는건 아니다.)
그로 인해 기술적인 부분에서도 많이 달라졌는데...
다이나믹을 외치게 되면서 무시 받던 자바스크립트가 각광을 받게 되었고,
플래쉬가 대세로 떠오르게 되었다.
기업들은 (사)용자의 관점으로 다시 생각하게 되었고,
Web은 용자를 위한 길을 선택 했다.
(Web이 용자를 선택 했다기 보다는 용자가 Web을 선택 한 것이 더 맞는 말 일 것이다.)
기획자와 디자이너, 개발자들은 더 고생이지만, 단순히 page 제작만 전부였던 예전에 비해 분명 더 보람 된 일을 하고 있는 것은 분명하지 않을까?
멀고도 험한 용자를 위한 길... ㅋㅋ
SyntaxHihglighter Test
This is a test file to insure that everything is working well.
function test() : String{ return 10;}잊어 먹지 말자...ㅠㅠ







Prev