2014-01-24 3 views
1

좀 테이블에서 계산하는 저장 프로 시저를 생성하고 다시 새로운 데이터 세트 검색하십시오 TableCustomers도 CUSTOMERNAME라는 열이 이제실행 저장 프로 시저를 여러 번 동적

" DECLARE @maxVal int " + 
    " Set @maxVal = (SELECT ID FROM TableCustomers " + 
    " WHERE Service_ID = @Service_ID) " + 
    " execute SP_CaculateData @maxVal "; 

을 각 CustmerName 여러 수 있습니다 Service_ID. 저장 프로 시저를 여러 번 실행하는 방법은 모두 CustomerName의 서비스 수에 따라 다릅니다. 뭔가 같은 :

나는 커서에 관해 무엇인가 읽었다. 그러나 누군가 내가 나에게 손을 들려 줄 수 있으면 나는 그것을 이해할 것이다.

+0

또 다른 옵션은 집합 기반 연산을 수행하는 것입니다 - 모든 정수 값을 테이블 반환 매개 변수를 허용하는 수정 된 버전의 proc에 전달하고 모든 결과를 동시에 계산하고 반환합니까? – StuartLC

답변

2

하나의 옵션은 고객과 서비스 식별자를 통해 반복하는 while 루프를 사용하는 것입니다

declare 
     @maxVal int 
     ,@customerName varchar(200) 
     ,@serviceID int 

select @customerName = MIN(CustomerName) 
from TableCustomers t 

while(select COUNT(1) 
     from TableCustomers t 
     where t.CustomerName >= @customerName) > 0 
    begin 

     --here we are dealing w/ a specific customer 
     --loop through the serviceIDs 

     select @serviceID = MIN(Service_ID) 
     from TableCustomers t 
     where t.CustomerName = @customerName 


     while(select COUNT(1) 
       from TableCustomers t 
       where t.CustomerName = @customerName 
       and t.Service_ID >= @serviceID) > 0 

      begin 
       select @maxVal = MAX(Id) 
       from TableCustomers t 
       where t.Service_ID = @serviceID 

       execute SP_CalculateData @maxVal 

       select @serviceID = MIN(Service_ID) 
       from TableCustomers t 
       where t.CustomerName = @customerName 
        and t.Service_ID > @serviceID 
      end 


     select @customerName = MIN(CustomerName) 
     from TableCustomers t 
     where t.CustomerName > @customerName 

    end 

나는이 커서보다 더 나은 수행하는 솔루션입니다 여부를 말할 수는 없지만, 그 일을 끝내야 해.

+0

정말 고마워요! 지금 나는 거기에서 움직이는 아이디어를 가지고있다 – MishMish

+0

당신의 환영 (도움이되기 때문에 기쁜). – agileMike

관련 문제