1

FOR XML句モードを使用していくつかのデータベースにクエリを実行しようとしていますが、このモードEXPLICITを使用しているときに XMLNAMESPACE とスキーマを指定する方法がわかりません。AUTORAW

このMSDNクエリの例では、その結果で、Schema1結果のスキーマとして を指定しています。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

そしてここにサンプル結果があります:

    <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>
     ...
4

1 に答える 1

2

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>
于 2012-07-09T14:36:41.907 に答える