동일한 컬럼이름을 사용하는 객체 검색하기
페이지 정보
작성자 서방님 댓글 0건 조회 151회 작성일 06-11-18 10:37본문
오늘 새벽부터 일찍 이러나 회사에서 수정한 부분을 업데이트 하는 작업을 했다..
아~~ 고단한 하루다.. .언제쯤이면 이런일을 자동으로 해결할 수 있을까...
새로 업데이트를 할때마다.. 전부 긴장을 하고 앉아 있으려니 .. 참... 힘든일이 아닐수 없다...
sp를 30여개 검색해서 우편번호 부분을 수정하는 작업을 했는데...
참 같은 컬럼 이름을 가지고 있는것들을 어떻게 찾아낼까 고민을 했는데
저번에 syscolumns를 읽었던게 생각나서 쿼리를 하나 만들었다..
별로 소용없는 사람도 있겠지만... 노가다라고 일컫어 지는 일련의 작업을 하는 인간들에게는 정말 좋을것이다.
일단 아래에 쿼리가 있다.
select so.name, sc.name, sc.length,
case so.xtype
when 'S' then 'System Table'
when 'U' then 'User Table'
when 'V' then 'View'
when 'P' then 'Procedure'
end as xtype
from
syscolumns sc left join sysobjects so
on sc.id=so.id
where
sc.name='zip_code' and length=10
정말 간단하지 않은가... ㅋㅋㅋ
컬럼 이름 'zip_code'이고 컬럼의 길이는 10인것들을 찾아라 하는것이다..
잘 찾아낼 것이다.
그런데 이 쿼리의 단점이 있다... 일부 sp들안에 생성된 임시테이블의 경우는 찾아내지 못한다..
이런건 일일이 syscomments를 찾아가면 검색을 해야한다..
syscomments의 내용은 text 필드.... like 검색을 하기 땜시.. 속도 거지 같다. ㅋㅋㅋ
일단 유용한 내용을 찾아서 이것들만 수정을 하면 되니.. 그래도 좋다...
다음엔 더 좋은 쿼리를 만들어봐야지.. 역쉬 짬이 생기니.. 꽁수도 늘어간다... ㅋㅋ
앗 참고로... name이라는 컬럼은 전에 말했든.. nvarchar(128) 짜리이다.. 그러므로 like 검색도 가능하다.. '%zipcode%' 라고 하면 zipcode가 들어간 모든 컬럼을 검색한다.
ㅋㅋㅋ
아싸 가오리~~
심심해서 샘플좀 보이려 다시 수정한다.
select user_name(so.uid) as 'owner_name', so.name, sc.name, sc.length,
case so.xtype
when 'S' then 'System Table'
when 'U' then 'User Table'
when 'V' then 'View'
when 'P' then 'Procedure'
end as xtype
from
syscolumns sc left join sysobjects so
on sc.id=so.id
where
sc.name like '%name%'
이건 그 유명한 northwind에서 name이라는 문자를 가지는 컬럼을 검색해 오는 쿼리이다.. 위에꺼에서 조금 버전업된것이다.. ㅋㅋㅋ
여하튼...
결과는 아래와 같다...
정말 많은 많은것들이 보인다..
좀 이상한 짓이긴 해도 상당히 유용한 쿼리 일 것이다.. 암암 누가 만들었는데 ㅋㅋㅋ
추가.. version 0.2
select user_name(so.uid) as [owner_name], so.name as [object_name], sc.name as [column_name], st.name as [data_type], sc.length,
case so.xtype
when 'S' then 'System Table'
when 'U' then 'User Table'
when 'V' then 'View'
when 'P' then 'Procedure'
end as [object_type]
from
syscolumns sc left outer join sysobjects so
on sc.id=so.id
left outer join systypes st
on sc.xtype=st.xtype
where
sc.name like '%name%'
결과 화면은 아래와 같다..
댓글목록
등록된 댓글이 없습니다.