1

이전 저장 프로 시저의 성능 향상과 함께 작업하고 있습니다. 현재 단일 노드 XML 매개 변수가 다른 저장 프로 시저에서 전달됩니다. 그러면 XML이 교차 적용에 사용됩니다. CROSS APPY의 X-Query가 행별로 값을 추출하는지 아니면 미리 구문 분석되는지 궁금합니다. 나 XML전달 XML 대 전달 사용자 정의 형식

이 대신 UDT로 목록을 통과하는 것이 적은 오버 헤드 있을까하는 것은 여기에 XML을

SELECT @NewRunBatchProcessSteps = (
    SELECT Tracking.NewPrimaryKey RunBatchProcessStepId 
    FROM @RunBatchProcessStep AS RunBatchProcessStep 
     INNER JOIN @RunBatchProcessNew Tracking ON RunBatchProcessStep.RunBatchProcessStepId = Tracking.OldPrimaryKey 
    FOR XML PATH('RunBatchProcessStep'), ROOT ('RunBatchProcessSteps') 
) 

를 생성이 사용되는 방법은 코드입니다.

SELECT SomeFields 
FROM RunBatchProcessStep 
CROSS APPLY @NewRunBatchProcessSteps.nodes('/RunBatchProcessSteps/RunBatchProcessStep') RunBatchProcessStepsXML(ref) 
INNER JOIN BatchProcessStep btp ON RunBatchProcessStep.BatchProcessStepId = btp.BatchProcessStepId 
INNER JOIN Module m ON m.ModuleCode = btp.ModuleCode 
WHERE RunBatchProcessStep.RunBatchProcessStepId = ref.value('RunBatchProcessStepId[1]', 'INT') 

나는 @NewRunBatchProcessSteps을 가지고 하나의 열 UDT로 돌려했다 후 내부 내가 성능 향상을 볼 수, 그것에 가입하면?

+0

그냥 시도해보십시오. – RBarryYoung

+0

그러나 * 일반적으로 * 예, 일련의 값을 사용자 정의 테이블 형식으로 전달하는 것이 XML보다 효율적이어야합니다. 그러나 마일리지는 상황에 따라 다를 수 있습니다. – RBarryYoung

+0

감사합니다. 나는 UDT와 함께 작동하는 버전을 만들고있다. 서로 다른 환경의 데이터가 너무 다르기 때문에 동일한 실행 계획을 거의 공유하지 않습니다. 그래서 당신의 "일반적으로"코멘트는 제가 찾고있는 것입니다. 나는 그것을 시도할만한 가치가 있는지 높은 수준에서 알고 싶었다. 감사! –

답변

0

데이터 수를 기반으로합니다. 더 많은 수의 데이터를 전달하면 UDT를 사용할 수 있습니다. 그렇지 않으면 XML을 사용할 수 있습니다. 더 많은 데이터를 전달할 때 XML 구문 분석에 더 많은 시간이 걸리기 때문입니다. 따라서 귀하의 요구 사항을 기반으로합니다.

관련 문제