2014-07-16 2 views
1

모두sql 2008에서 xml 문서 내보내기

저는 XML 사용 경험이 거의 없으므로 친절하게 작성하십시오.

우리는 dataswitch라는 응용 프로그램을 사용하여 xml을 가져와 비즈니스 객체를 통해 ERP 시스템으로 처리합니다.

샘플 XML 문서에서 다음과 같이 다시 작성하려는 출력이 있습니다.

**<?xml version="1.0" encoding="Windows-1252" ?> 
- <IssueDetails Language="05" CssStyle="" DecFormat="1" DateFormat="01" Role="01" Version="6.0.000">** 
- <Item> 
    <Job>00000121</Job> 
    <NonStocked>N</NonStocked> 
    <Warehouse>RM</Warehouse> 
    <StockCode>BBMB100</StockCode> 
    <Line>00</Line> 
    <QuantityToIssue>1.000</QuantityToIssue> 
    </Item> 
    </IssueDetails> 

지금까지 내 쿼리를 작성하기 위해 XML을위한 경로 방법에 근무하고 (지금까지 브라우저에서 열립니다 XML 문서를 생성 성공했다 write the output

Phil Factor에서 SP를 사용했다 많은 시도가 필요합니다!)

이것은, 상단 선이 다른 유의하시기 바랍니다 만들 내가 관리 한 출력

**<IssueDetails xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">** 
- <Item> 
    <Job>00044816</Job> 
    <NonStocked>N</NonStocked> 
    <Warehouse>C2</Warehouse> 
    <StockCode>FG00707</StockCode> 
    <Line>00</Line> 
    <QuantityToIssue>400.000000000</QuantityToIssue> 
    </Item> 
- <Item> 
    <Job>00044816</Job> 
    <NonStocked>N</NonStocked> 
    <Warehouse>C2</Warehouse> 
    <StockCode>FG00707</StockCode> 
    <Line>00</Line> 
    <QuantityToIssue>10.000000000</QuantityToIssue> 
    </Item> 
</IssueDetails> 

그래서 내 질문에 어떻게 내 출력에있는 윗줄을 샘플 출력과 같게 만들 수 있습니까?

내 절차는 당신에게 당신은 내가 아래에 한 일을 같은 서브 쿼리를 할 필요가 본체의 자식 요소 첫 번째 줄을 얻으려면

Declare 
    @XML_1 varchar (max), 
    @myXML varchar(max), 
    @myFile varchar (30), 
    @Path varchar (100) 

set @XML_1='' 
set @myFile ='MaterialIssuesTest.xml' 
set @Path='D:\Temp\' 


--Query database for materials 
Set @XML_1 [email protected]_1 + ( SELECT WJM.[Job] 

      ,Case when WJM.[Warehouse]='**' then 'Y' else 'N' end as NonStocked 
      ,WJM.[Warehouse] 
      ,rtrim(LP.StockCode) as StockCode 
      ,WJM.[Line] 
      ,[UnitQtyReqd]*LP.LQtyComplete as QuantityToIssue 
      FROM [SysproCompanyR].[dbo].[WipJobAllMat] WJM 
      inner join CHC_Production.LabPostsAtMileOps LP On WJM.Job=LP.Job 
      Where WJM.Job in ('00044816')and (WJM.OperationOffset > LP.PrevOp 
      and WJM.OperationOffset<LP.LOperation) 
      FOR XML Path ('Item'),ROOT ('IssueDetails'), ELEMENTS XSINIL 
      ) 
set @myXML = LTRIM(rtrim(@XML_1)) 
--Debug print xml 
Print @myXML 
--Output xml to document 
execute  dbo.spWriteStringToFile @myXML, @Path, @myFile 
GO 

답변

0

아래에 나열됩니다. 내 예 다시, @ 기호로 이름을 필요로하는 속성이 (내가 그것을 밖으로 설정 돕기 위해 서식 변경!)으로 활용하려면 다음

SET @XML_1 [email protected]_1 + 
    ( 
    SELECT WJM.[Job], 
      (
      SELECT '' AS '@Language', 
        '' AS '@CssStyle', 
        '' AS '@DecFormat', 
        '' AS '@DateFormat', 
        '' AS '@Role', 
        '' AS '@Version' 
      FROM YOURTABLENAME YTN 
      WHERE YTN.[SOMEFIELD] = WJM.[SOMEFIELD] 
      FOR XML PATH(''), TYPE 
      ) AS 'IssueDetails' 

      ,Case when WJM.[Warehouse]='**' then 'Y' else 'N' end as NonStocked 
      ,WJM.[Warehouse] 
      ,rtrim(LP.StockCode) as StockCode 
      ,WJM.[Line] 
      ,[UnitQtyReqd]*LP.LQtyComplete as QuantityToIssue 
    FROM [SysproCompanyR].[dbo].[WipJobAllMat] WJM 
    INNER JOIN CHC_Production.LabPostsAtMileOps LP ON WJM.Job = LP.Job 
    WHERE WJM.Job IN ('00044816') AND (WJM.OperationOffset > LP.PrevOp 
     AND WJM.OperationOffset<LP.LOperation) 
    FOR XML Path ('Item'), ROOT ('IssueDetails'), ELEMENTS XSINIL 
    ) 

내가 데이터가 어디에서 오는가 모르는, 그래서 이미 가지고있는 데이터에 테이블 이름과 WHERE 절을 채워야합니다. 데이터가 이미 제공 한 데이터의 하위라고 가정합니다.

메모리에서이 작업을 수행 할 때 구문이 정확하지 않을 수 있으며이 결과를 얻으려면 여러 가지 변형이 있습니다.

+0

당신이 제공 한 하위 쿼리의 데이터가 현재 정적이므로 더 쉽게 할 수 있습니다. 많은 감사합니다 나는 그것에게 점심을 먹으러 갈 것이다 –

+0

당신이 그것으로 어떻게 지내는지에 관해 안 단다. 모든 문제와 나는 당신을 위해 구문을 시도하고 정리할 것이다. – XN16

관련 문제