2013-06-03 5 views
0
나는 XML 변수에 XML EXPLICIT 문에 대한 SELECT의 결과를 할당 할

같은SQL 서버에

CREATE PROCEDURE BILLING_RESPONSE 
AS DECLARE @Data AS XML 

SET @Data = (SELECT 

       1 AS Tag, 
       NULL AS Parent, 
       NULL AS 'CallTransactions!1!', 
       NULL AS 'TCALTRS!2!TRS_DAT_TE!cdata', 
       NULL AS 'TCALTRS!2!TRS_CRT_DT!Element' 
      UNION ALL 
      SELECT 
       2 AS Tag, 
       1 AS Parent, 
       NULL, 
       TRS_DAT_TE, 
       TRS_CRT_DT 
      FROM TCALTRS 
      WHERE TRS_CRT_DT between CONVERT(date,GETDATE()-1) and CONVERT(date,getdate()) and 
      TRS_DAT_TE like '%(Submit Response)%' 
      FOR XML EXPLICIT   
      ) 

SELECT @DATA 
GO 

난, 레벨 15 메시지 1086 다음과 같은 오류 무엇입니까이 쿼리를 실행하면 , 상태 1, 절차 22 BILLING_RESPONSE, 라인 22 집합 연산자가 포함 된 뷰, 인라인 함수, 파생 테이블 및 하위 쿼리에서 FOR XML 절이 유효하지 않습니다. 이 문제를 해결하려면 파생 테이블 구문을 사용하여 집합 연산자가 들어있는 SELECT를 래핑하고 그 위에 FOR XML을 적용하십시오.

+1

미국에서 큰 소리로 외 치지 마십시오! –

답변

0

이것이 맞으면 @Data 변수가 필요하지 않습니다. 당신의 sp가 질의 결과를 직접 돌려 주면 끝났습니다.

CREATE PROCEDURE BILLING_RESPONSE AS 
SELECT 

     1 AS Tag, 
     NULL AS Parent, 
     NULL AS 'CallTransactions!1!', 
     NULL AS 'TCALTRS!2!TRS_DAT_TE!cdata', 
     NULL AS 'TCALTRS!2!TRS_CRT_DT!Element' 
    UNION ALL 
    SELECT 
     2 AS Tag, 
     1 AS Parent, 
     NULL, 
     TRS_DAT_TE, 
     TRS_CRT_DT 
    FROM TCALTRS 
    WHERE TRS_CRT_DT between CONVERT(date,GETDATE()-1) and CONVERT(date,getdate()) and 
    TRS_DAT_TE like '%(Submit Response)%' 
    FOR XML EXPLICIT 
+0

SSIS 패키지에서이 SP를 호출하여 SQL 작업을 실행합니다. 이 SP의 putput을 SSIS 패키지의 XML 변수에 할당 할 수 있습니까? – user2232290

+0

물론 SQL Task의 결과 집합 속성을 설정하고 평소대로 변수에 할당하면됩니다. http://msdn.microsoft.com/en-us/library/ms141689.aspx – Oscar

0

오류는 특히 명확하지 않다,하지만 그것을 말하는 것은 노동 조합 (집합 연산자의 유형)를 포함하고 있기 때문에 당신이 인라인 하위 쿼리에서 FOR XML 절을 사용할 수 없다는 것입니다

임시 해결책은 다른 항목에 하위 쿼리를 래핑하고 별도로 호출하는 것입니다. 예를 들면 다음과 같습니다.

CREATE PROCEDURE BILLING_RESPONSE 
AS DECLARE @Data AS XML 

;WITH DATA AS(
       SELECT 
       1 AS Tag, 
       NULL AS Parent, 
       NULL AS 'CallTransactions!1!', 
       NULL AS 'TCALTRS!2!TRS_DAT_TE!cdata', 
       NULL AS 'TCALTRS!2!TRS_CRT_DT!Element' 
      UNION ALL 
      SELECT 
       2 AS Tag, 
       1 AS Parent, 
       NULL, 
       TRS_DAT_TE, 
       TRS_CRT_DT 
      FROM TCALTRS 
      WHERE TRS_CRT_DT between CONVERT(date,GETDATE()-1) and CONVERT(date,getdate()) and 
      TRS_DAT_TE like '%(Submit Response)%' 
      FOR XML EXPLICIT   
      ) 
SELECT @Data = (SELECT * FROM DATA FOR XML EXPLICIT) 
SELECT @DATA 
GO