2012-07-09 5 views
1

FOR XMLEXPLICIT 절을 사용하여 일부 데이터베이스를 쿼리하려고하는데이 모드를 WITH XMLNAMESPACE와 같이 사용하는 동안 XMLNAMESPACE 및 스키마를 지정하는 방법을 모르겠습니다. 샘플은 여기 결과 XMLSQL Server 쿼리에서 XML 절에 명시 적 모드 지정

USE AdventureWorks2012; 
GO 
SELECT 1 as Tag, 
0 as Parent, 
SalesOrderID as [OrderHeader!1!SalesOrderID!id], 
OrderDate  as [OrderHeader!1!OrderDate], 
CustomerID as [OrderHeader!1!CustomerID], 
NULL   as [SalesPerson!2!SalesPersonID], 
NULL   as [OrderDetail!3!SalesOrderID!idref], 
NULL   as [OrderDetail!3!LineTotal], 
NULL   as [OrderDetail!3!ProductID], 
NULL   as [OrderDetail!3!OrderQty] 
FROM Sales.SalesOrderHeader 
WHERE SalesOrderID=43659 or SalesOrderID=43661 
.... 
SELECT 3 as Tag, 
1 as Parent, 
SOD.SalesOrderID, 
NULL, 
NULL, 
SalesPersonID, 
SOH.SalesOrderID, 
LineTotal, 
ProductID, 
OrderQty 
FROM Sales.SalesOrderHeader SOH,Sales.SalesOrderDetail SOD 
WHERE SOH.SalesOrderID = SOD.SalesOrderID 
AND  (SOH.SalesOrderID=43659 or SOH.SalesOrderID=43661) 
ORDER BY [OrderHeader!1!SalesOrderID!id], [SalesPerson!2!SalesPersonID], 
    [OrderDetail!3!SalesOrderID!idref],[OrderDetail!3!LineTotal] 
FOR XML EXPLICIT, XMLDATA 

을위한 스키마로서의 지정에게 그 결과를 상기 Schema1AUTO 모드 RAW

MSDN 예 쿼리를 사용하는 동안 및 결과 :

<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data"     xmlns:dt="urn:schemas-microsoft-com:datatypes"> 
    <ElementType name="OrderHeader" content="mixed" model="open"> 
    <AttributeType name="SalesOrderID" dt:type="id" /> 
    <AttributeType name="OrderDate" dt:type="dateTime" /> 
    <AttributeType name="CustomerID" dt:type="i4" /> 
    <attribute type="SalesOrderID" /> 
    <attribute type="OrderDate" /> 
    <attribute type="CustomerID" /> 
    </ElementType> 
     <ElementType name="SalesPerson" content="mixed" model="open"> 
    <AttributeType name="SalesPersonID" dt:type="i4" /> 
    <attribute type="SalesPersonID" /> 
     </ElementType> 
     <ElementType name="OrderDetail" content="mixed" model="open"> 
    <AttributeType name="SalesOrderID" dt:type="idref" /> 
    <AttributeType name="LineTotal" dt:type="number" /> 
    <AttributeType name="ProductID" dt:type="i4" /> 
    <AttributeType name="OrderQty" dt:type="i2" /> 
    <attribute type="SalesOrderID" /> 
    <attribute type="LineTotal" /> 
    <attribute type="ProductID" /> 
    <attribute type="OrderQty" /> 
     </ElementType> 
     </Schema> 
     <OrderHeader xmlns="x-schema:#Schema1" SalesOrderID="43659" OrderDate="2001-07-01T00:00:00" CustomerID="676"> 
     <SalesPerson SalesPersonID="279" /> 
    <OrderDetail SalesOrderID="43659" LineTotal="10.373000" ProductID="712" OrderQty="2" /> 
    ... 
    </OrderHeader> 
    ... 

답변

1

MSDN의 쿼리에는 XMLDATA 지시어가 사용되므로 스키마가 포함되어 있습니다.

인라인 XML-Data Reduced (XDR) 스키마가 이되도록 지정합니다. 스키마는 문서에 인라인 스키마로 추가됩니다. 작동하는 샘플은 FOR XML과 함께 RAW 모드 사용을 참조하십시오.

명시 적 모드로 네임 스페이스를 포함하려면 직접 추가해야하며 그에 따라 요소와 속성의 이름을 지정해야합니다.

declare @T table 
(
    id int, 
    title varchar(50) 
) 

insert into @T values(451, 'Receptionist') 
insert into @T values(1025, 'Secretary') 

select 1 as Tag, 
     null as Parent, 
     'xx.yy.zz' as [root!1!xmlns:ns], 
     null as [ns:item!2!ns:id], 
     null as [ns:item!2!ns:title] 
union all 
select 2 as Tag, 
     1 as Parent, 
     null, 
     id, 
     title 
from @T 
for xml explicit 

결과 :

<root xmlns:ns="xx.yy.zz"> 
    <ns:item ns:id="451" ns:title="Receptionist" /> 
    <ns:item ns:id="1025" ns:title="Secretary" /> 
</root>