2012-12-03 3 views
0

필자는 필자가 작성한 SQL 스크립트를 사용하여 특정 열 (예 : null이 아니거나 길이가 0이 아닌 문자열 등)이 사용되었는지 찾기 위해 DB 스키마를 검색하는 데 도움이됩니다. 그리고 가장 인기있는 가치는 무엇입니까?SQL Server While 루프 반환 결과 찾기

전체 검색을 완료하는 데 시간이 걸릴 수 있으므로 루프에서 찾은 결과를 반환 할 수 있기를 정말로 바랍니다. 결과적으로 VB.NET 측에서 결과를 볼 수있는 방법으로 결과를 반환하는 방법이 있습니까? SqlDataReader.Read?

지금 당장은 임시 테이블에 결과를 저장하고 끝에 임시 테이블을 반환합니다.

감사합니다.

+1

CLR을 사용하고 레코드를 수신 할 때 데이터를 보내는 스트리밍 결과 집합을 생성하는 것보다는 짧게하는 것이 가장 좋은 방법은 전역 temp 테이블 (예 :'## temp')을 만들고 전역 임시 테이블에 값/레코드를 보여주는 보조 프로세스. –

답변

1

단일 SQL 스크립트 인 경우가 아니라면 아니오 - 호출자는 계속 이동하기 전에 전체 결과 세트를 기다립니다.

그러나이 같은 몇 단계로 그것을 깰 수 :

  • 은 VB.NET에
  • 반환 이러한 결과를 당신이 관심을 가질만한 모든 열을 나열 초기 조회, 확인
  • 이 집합의 각 결과에 대해 나머지 프로세스를 실행하여 실제로 관심있는 값을 얻습니다.
  • 각 데이터 컬렉션을 받으면 다음을 수행 할 수 있습니다. 원한다면 그걸로 무언가를하십시오. 예를 들어 새로운 스레드를 스핀 오프하여 몇 가지 추가 처리를 수행하십시오.

단일 T-SQL 스크립트 인 경우 한 번에 실행하여 결과를 반환합니다.하지만 내부에서 루프가 아닌 내부에서 루프를 실행하여 루프를 실행할 수 있다면 SQL을 사용하면 각 단계에서 결과에 액세스 할 수 있습니다.

+0

그게 내가 생각한거야. 감사. .NET의 각 열의 사용량을 확인하기 위해 루프를 돌면서 스키마의 첫 번째 결과 집합 (매우 빠르게)을 가져온 후에는 SQLConnection 개체 하나를 사용하는 것이 가장 좋습니다. 연결을 끊을 때마다 각 열의 사용량을 확인하기 위해 매번 큰 병목 현상이 발생할 수 있습니다. 맞습니까? – John

+0

연결 협상은 꽤 빠르기 때문에 중요하지 않습니다. 그러나 연결을 끊을 필요가 없으므로 루프의 각 단계마다 동일한 연결을 다시 사용하는 것이 좋습니다. 버릇의 포인트로서, 나는 대개 SqlConnection을 정의하는 "using"문에서 데이터 연결 코드를 래핑합니다.이 문은 컴파일 타임에 Finally 블록에서 닫기/처분 코드를 추가합니다. – SqlRyan

+0

쿨, 잘 알고 있습니다. – John