2013-10-09 4 views
0

@property_id, @property_component_id 및 @return_as_xml의 3 가지 매개 변수를 기반으로 일부 XML을 생성하는 저장 프로 시저가 있습니다. @return_as_xml의 값은 0 인 모든 레코드에 대해 동일합니다.저장 프로 시저 루프

저는 이것을 수정 했으므로 특정 조건 즉 활성 및 임대 속성에 따라 여러 속성 레코드를 실행해야합니다. property와 property_component 사이에는 one-many 관계가 존재하므로 property에는 여러 개의 property_components가있을 수 있고 적어도 하나의 해당 레코드가 있습니다.

나는 속성 테이블에서 활성 및 임대 된 필드를 기반으로 원하는 레코드를 선택해야합니다. 해당하는 property_id가있는 property_component 테이블에서 해당하는 property_component_id를 선택하십시오. 그런 다음 각 결과 행을 반복하고 각 행에 대한 새 매개 변수를 전달하는 저장 프로 시저를 실행하려고합니다.

저장 프로 시저를 수정할 필요가 없습니다. 저장 프로 시저를 수정할 필요가없는 asp.net 콘솔 응용 프로그램에서 실행되므로 저장 프로 시저를 수정하지 마십시오. 프로 시저를 사용하여 여러 속성에 대해 XML을 반환합니다.

내 저장 프로 시저를 실행 단지 표준 생성 된 SQL 서버 코드 : 내 설명 시나리오 작업이를 수정할 수있는 방법

DECLARE @return_value int 

EXEC @return_value = [dbo].[p_CPGUploader__FetchXMLForProperty_RCA] 
    @property_id = 106016, 
    @property_component_id = 108382, 
    @return_as_xml = 0 

SELECT 'Return Value' = @return_value 
GO 

, 나는 그것이 실행을 통해 다음 루프를 레코드를 선택 얻을 수있는 방법 저장된 절차의 각 행에서 값을 기반으로 선택 통과? asp.net 배경에서 왔고 SQL Server 기술이 극도로 제한되어 있으므로 도움을 주시면 대단히 감사하겠습니다. 2004 년에 원래 저장 프로 시저가 작성되었다고 생각되지만 SQL Server 2008 R2를 사용하고 있습니다.

+0

대신 저장 프로 시저 쿼리를 함수로 변환 할 수 있습니까? 함수에서 XML을 만들면 SELECT 문에서 호출 할 수 있습니까? 어떤 버전의 SQL Server를 사용하고 있습니까? – codingbadger

답변

0

저장 프로 시저를 실제로 변경할 수없는 경우 커서를 사용하여 루프를 만들 수 있습니다.

절대적으로 필요한 경우가 아니라면이 과정을 조언하지 않겠습니다.

declare c cursor local read_only for 
select property_component_id from propertiestable 

declare @id 

open c 
fetch from c into @id 
while @@fetch_status=0 
begin 
    EXEC @return_value = [dbo].[p_CPGUploader__FetchXMLForProperty_RCA] 
      @property_id = 106016, 
      @property_component_id = @id, 
      @return_as_xml = 0 

    fetch next from c into @id 
end 
close c 
deallocate c