SQL Server 2005 모든 표 에서 지정 한 열 을 검색 하 는 방법

때때로 우 리 는 열의 이름 만 알 고 있 지만,이 열 데이터 가 도대체 어느 표 안에 있 는 지 모른다 면,아래 의 방법 으로 이 열 데 이 터 를 함유 한 표를 찾 아 낼 수 있다.

Select O.name objectName, C.name ColumnName from sys.columns C inner join sys.objects O ON C.object_id=O.object_id where C.name like '%ColumnName%'order by O.name, C.name
 
실제 테스트 에서 ColumnName 을 찾 으 려 는 열의 이름 으로 바 꾸 면 됩 니 다.
문자열 이 필드 에 있 을 때 검색 한 SQL 문 구 를 어떻게 씁 니까?
질문 설명:
이러한 문제 가 자주 발생 합 니 다.검색 조건 은 특정한 문자열 이 특정한 필드 에 포함 되 어 있 는 것 입 니 다.특정한 필드 가 특정한 문자열 에 포함 되 어 있다 면 in 을 사용 할 수 있다 는 것 을 알 고 있 습 니 다.
예 를 들 어 sql="select*form tb where tb.name in("&name&")"  
설명:name 은 표 tb 의 필드 입 니 다.name 은 획득 한 문자열 입 니 다.이 검색 필드 name 은 주어진 문자열 names 의 모든 집합 입 니 다)
이런 방법 은 당연히 더 말 할 필요 가 없 지만,우리 가 흔히 만 나 는 문 제 는'거꾸로'이다.즉,  "name"문자열 은 tb.name 표 필드 에 있 습 니 다.예 를 들 어 표 tb 의 name 필드 값 은 장 삼,이사,왕 오,조 육 입 니 다.
그리고 우리 가 조회 하고 자 하 는 name=장 3 은 표 의 name 필드 에 조회 조건 이 포함 되 어 있 는 지,즉'장 3'이 있 을 때 조회 에 부합 되 는 지 판단 해 야 합 니 다.
해결 방법:
1.가장 먼저 떠 오 르 는 것 은 당연히 like 조회(최종 해결 방안 이 아니 라 최종 방법 은 계속 아래 를 본다)
예 를 들 어 sql="select*form tb where tb.name  like  '%" & 장삼&'%' 
설명 하 자 면 이 문 구 는 모든 표 의 name 필드 에'장 삼'의 집합 이 있 는 것 을 알 수 있 습 니 다.그러나 누군가가'진 장 삼 팔'이 라 고 가정 하면 그의 이름 은 부모 가 어떻게 지 었 든 지 간 에'장 삼'이라는 두 글자 도 있 습 니 다.그러면 조회 상황 에 부합 되 고 그 는 자 연 스 럽 게 조회 되 고 우 리 는'장 삼'만 있 으 면 됩 니 다."진장 삼 팔"말고 다음 단 계 를 보 세 요.
2.필드 의 값 이'장삼,이사,왕 오,조 육'이 아니 라'장삼,이사,왕 오,조 육'이 라면 생각해 보 세 요.
뭘 발 견 했 어?
예,문자열 앞 뒤에 쉼표 가 하나 더 있 으 면 유용 합 니 다.쉼표 는 제한 조건 으로 할 수 있 기 때 문 입 니 다.만약 에'진 장 삼 팔'이 이때 도 이 필드 에 있 으 면 그의 앞 뒤에 도 쉼표 가 있 습 니 다.이렇게 쉼표 에 따라 조 회 를 제어 하면 정확 한 위치 에 있 습 니 다.
자,다시 쓰기 검색:sql="select*form tb where tb.name"  like  '%," & 장삼&",%"
여기까지 원리 와 해결 방법 은 이미 모두 말 했 지만,당신 은 다음 과 같은 문제 에 부 딪 힐 수도 있 습 니 다.세 번 째 단 계 를 계속 보 세 요.
3.이러한 쉼표 가 있 는 필드 는 우리 가 저장 할 때 check 을 많이 선택 하여 얻 은 값 을 선택 한 경우 가 있 습 니 다.이때 데이터 베 이 스 를 기록 할 때 자동 으로 다른 check 값 에 쉼표 를 추가 합 니 다.
예 를 들 어 취 미 를 선택 하 세 요.'책 읽 기(value=1)','노래 듣 기(value=21)','등산(value=13)'을 선택 할 수 있 습 니 다.
이때 얻 은 값 은 xingquaihao="1,21,13"입 니 다.이 필드 를 데이터베이스 에 저장 하면 바로 이런 형식 입 니 다.그러나 이때 위의 조회 방식 으로 직접 조회 하면...
직접 사용:sql="select*form tb where xingquaihao  like  '%" & 1 & "%' ”   1 을 포함 한 모든 것 을 얻 게 될 것 이 며,21,13 중의 1 이라도 밝 혀 질 것 이다.
필드 앞 뒤 에 쉼표 를 붙 여',1,21,13'으로 바 꿀 때 21 또는 13 을 찾 으 면 sql='select*form tb where xingquaihao'로 바 꿉 니 다.  like  '%," & 21&',%'결 과 는 아무것도 알 아내 지 못 했다.
왜 가치 가 있 는데 도 알 아내 지 못 합 니까?
자동 으로 체크 한 다음 에 저 장 된 필드 중간 에 빈 칸 이 있 기 때 문 입 니 다.예 를 들 어'1,21,13',1 의 뒤 에는 쉼표 가 있 고 쉼표 뒤 에는 빈 칸 이 있 으 며 그 다음 에 21 입 니 다.
해결 방법 은 간단 합 니 다.체크 를 한 후 입고 하기 전에 빈 칸 을 제거 합 니 다.
xingquaihao="1, 21, 13"
xingquaihao=replace(xingquaihao,",")'빈 칸 삭제
이렇게 얻 은 것 은 바로 컴 팩 트 형의 값 입 니 다.다시 위의 방법 에 따라 조회 하여 해결 합 니 다!

좋은 웹페이지 즐겨찾기