2013-02-07 2 views
1

같은 인수 유형을 여러 번 쿼리 할 수 ​​있기를 원합니다. 예를 들어 몇 가지 ID를 사용하면 간단한 예제를 유지할 수 있습니다. 따라서 한 번만 수행 할 필요없이 한 번만 프로 시저를 실행하면됩니다. 각 개별 ID에 대해 내 단일 인스턴스 proc이 이름을 반환하는 곳에서 get-all proc은 단일 열 테이블 이름을 반환합니다.하나에 여러 쿼리를 결합

내가 지금 무엇을 가지고 :

EXEC MyProc(123); 
EXEC MyProc(456); 
EXEC MyProc(789); 

내가 좋아하는 것이 무엇 :

// Square brackets aren't correct syntax, 
// they just represent a list that contains x number of IDs 
EXEC MyProc([123, 456, 789]); 

내가이 작업을 수행 할 수 그렇다면, '아무튼 그런 일을 처리하기위한 쉬운 메커니즘이 커서와 다양한 지나치게 복잡한 것들을 포함합니까? 이것은 심지어 좋은 생각으로 간주 될 것입니까?

+2

[Sommarskog 's articles on arrays] (http://www.sommarskog.se/arrays-in-sql.html) 테이블 값 매개 변수는 쉽고 강력하며 XML 목록 인수는 최상의 성능을 나타내는 경향이 있습니다. – Andomar

답변

0

proc을 한 번만 실행하려면이 작업을 수행 할 T-SQL 함수 또는 구문 설탕이 없으므로 proc을 리팩터링하여 여러 ID로 작업해야합니다.

하나 이상의 ID가있을 수 있다는 점에서 가변적 인 경우 하나의 매개 변수로 여러 ID를 proc에 전달해야합니다. SQL Server의 최신 버전에서는 정렬 배열을 쉽게 전달할 수 있습니다.

예를 들어, 당신이 시도 할 수 있습니다 통과 :

  • TVPs SQL Server의 2008+
  • 구분 한 후 다음 PROC에서 분석 된 PROC
  • XML로 분리 된 문자열
  • proc에 의해 동적으로 읽혀지는 테이블 이름
  • proc와 호출자가 미리 알고있는 테이블 이름을 사용하십시오.

배열을 전달하는 빠른 검색은 SQL Server에서 더 많은 결과를 얻습니다. 그 중 가장 좋은 것은 @Andomar에서 언급 한 Arrays and Lists in SQL Server입니다.