1

AdventureWorks データベースを使用しており、FOR XML 句を含むクエリを使用して xml ブロッ​​クを構築したいのですが、結果に特定の XML スキーマを指定して、そのデータ型などを取得する必要があります。

たとえば、このサンプルクエリ「コピー済み」

 SELECT e.EmployeeID, c.FirstName, c.MiddleName, c.LastName
 FROM HumanResources.Employee e INNER JOIN Person.Contact c
 ON c.ContactID = e.ContactID
 WHERE c.FirstName = 'Rob'
 FOR XML RAW ('Employee'), ROOT ('Employees'), ELEMENTS XSINIL, XMLSCHEMA; 

この結果を得る

<Employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

    <xsd:element name="Employee">

      <xsd:complexType>

        <xsd:sequence>

          <xsd:element name="EmployeeID" type="sqltypes:int" nillable="1" />

          <xsd:element name="FirstName" nillable="1">

            <xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks].[dbo].[Name]">

              <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">

                <xsd:maxLength value="50" />

              </xsd:restriction>

            </xsd:simpleType>

          </xsd:element>

          <xsd:element name="MiddleName" nillable="1">

            <xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks].[dbo].[Name]">

              <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">

                <xsd:maxLength value="50" />

              </xsd:restriction>

            </xsd:simpleType>

          </xsd:element>

          <xsd:element name="LastName" nillable="1">

            <xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks].[dbo].[Name]">

              <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">

                <xsd:maxLength value="50" />

              </xsd:restriction>

            </xsd:simpleType>

          </xsd:element>

        </xsd:sequence>

      </xsd:complexType>

    </xsd:element>

  </xsd:schema>

  <Employee xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

    <EmployeeID>4</EmployeeID>

    <FirstName>Rob</FirstName>

    <MiddleName xsi:nil="true" />

    <LastName>Walters</LastName>

  </Employee>

  <Employee xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

    <EmployeeID>168</EmployeeID>

    <FirstName>Rob</FirstName>

    <MiddleName>T</MiddleName>

    <LastName>Caron</LastName>

  </Employee>

</Employees>

別のオンラインスキーマを参照する必要があります..可能ですか?

ありがとう。

4

1 に答える 1

1

EXPLICITクエリは既存のスキーマに準拠する必要があるため、生成された XML はmodeなどを使用して自分で制御する必要があると思います。この場合、このオプションは使用できませんXMLSCHEMAが、独自のスキーマが既にあるので問題ありません。

于 2012-06-03T14:43:39.640 に答える