2014-05-23 5 views
1

Excel 스프레드 시트로 변환 할 수있는 형식으로 XML을 생성하는 SQL 쿼리를 작성하려고합니다.excel sheetData 형식을 생성하는 xml 문을 선택하십시오.

select * from 
(
    SELECT * from table1 
) t 
    for xml path('row'), root('sheetData') 

이 다음 XML을 생성을 다음과 같이 그래서 원래의 SQL 테이블은 내가 지금까지 생산입니다 관리해야

id Run  Name Outcome 
1 Run1 Test1 1 
2 Run2 Test2 2 

SQL 쿼리 다음과 같은 데이터를 포함

<sheetData> 
    <row r="1"> 
    <Run>Run1</Run> 
    <Name>Test1</Name> 
    <Outcome>1</Outcome> 
    </row> 
    <row r="2"> 
    <Run>Run2</Run> 
    <Name>Test2</Name> 
    <Outcome>2</Outcome> 
    </row> 
</sheetData> 

그래서 무엇을 다음 XML 형식을 가져와야합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<sheetData> 
    <row r="1"> 
     <c r="A1" t="inlineStr"> 
     <is> 
      <t>Run1</t> 
     </is> 
     </c> 
     <c r="B1" t="inlineStr"> 
     <is> 
      <t>Test1</t> 
     </is> 
     </c> 
     <c r="C1" t="inlineStr"> 
     <is> 
      <t>1</t> 
     </is> 
     </c>  
    </row> 
    <row r="2"> 
     <c r="A2" t="inlineStr"> 
     <is> 
      <t>Run2</t> 
     </is> 
     </c> 
     <c r="B2" t="inlineStr"> 
     <is> 
      <t>Test2</t> 
     </is> 
     </c> 
     <c r="C2" t="inlineStr"> 
     <is> 
      <t>2</t> 
     </is> 
     </c>  
    </row> 
</sheetData> 

지금은 원하는 출력을 얻기 위해 첫 xml 형식의 변환을 수행했지만, 추가 변환을 거치지 않고 직접 생성 할 수있는 SQL 쿼리를 작성하고 싶습니다. 당신의 도움을 주셔서 감사합니다.

+0

이는 더 SQL 질문처럼 들린다. –

+0

t-sql로 대체되었습니다. 포인터 주셔서 감사. – allan

답변

1

다음은 원하는대로 할 수 있습니다. 는 XSLT 질문에 반대는`xslt` 태그를 제거하고 대신`sql` (또는`t-sql`) 태그를 추가 가치가있을 수도 있으므로

DECLARE @Data TABLE (
    [id] INT, 
    [Run] NVARCHAR(20), 
    [Name] NVARCHAR(20), 
    [Outcome] INT 
) 

INSERT INTO 
    @Data ([id], [Run], [Name], [Outcome]) 
VALUES 
    (1, 'Run1', 'Test1', 1), 
    (2, 'Run2', 'Test2', 2) 

DECLARE @Xml XML = (
    SELECT 
     [Id] AS [@r], 
     (SELECT 
      'A'+CONVERT(nvarchar(20), [Id]) AS [@r], 
      'inlineStr' AS [@t], 
      (SELECT 
       [Run] AS [t] 
      FOR XML PATH('is'), TYPE) 
     FOR XML PATH('c'), TYPE), 

     (SELECT 
      'B'+CONVERT(nvarchar(20), [Id]) AS [@r], 
      'inlineStr' AS [@t], 
      (SELECT 
       [Name] AS [t] 
      FOR XML PATH('is'), TYPE) 
     FOR XML PATH('c'), TYPE), 

     (SELECT 
      'C'+CONVERT(nvarchar(20), [Id]) AS [@r], 
      'inlineStr' AS [@t], 
      (SELECT 
       [Outcome] AS [t] 
      FOR XML PATH('is'), TYPE) 
     FOR XML PATH('c'), TYPE) 

    FROM 
     @Data 
    FOR XML PATH('row'), ROOT('sheetData'), TYPE 
) 
SELECT 
    '<?xml version="1.0" encoding="UTF-8"?>' 
    +CONVERT(NVARCHAR(MAX), @Xml) 
+0

원하는 출력을 생성합니다. 그래도 네 개의 열 너머로 일반화 할 수 있도록 조정할 필요가 있습니다. – allan