1

入れ子になった XMLSCHEMA を SQL Server 2005 から返すことはできますか?

現在、XML ドキュメントを返すために実行できる NESTED 選択クエリを生成するストアド プロシージャがあります。これを行うには、ネストされた各クエリの最後にこれを追加します。

FOR XML AUTO   ,TYPE  ,ELEMENTS

私はこれを次のように変更するだけでした:

FOR XML AUTO   ,TYPE  ,ELEMENTS, XMLSCHEMA

ネストされた XSD ドキュメントを返すことができるかもしれません。

返されるものは、別の XSD 全体が内部に貼り付けられた XSD のように見えます。つまり、それぞれに独自の名前空間と schemaLocation がありました。ルート XSD 内に xsd:elements として表示する必要があるだけです。

SELECT 
   Stuff,
   (SELECT OtherStuff 
    FROM test2  
    FOR XML AUTO, TYPE, ELEMENTS, XMLSCHEMA) 
FROM test 
FOR XML AUTO, TYPE, ELEMENTS, XMLSCHEMA

これは返されるものです:

<xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet26" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet26" 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="test" type="sqltypes:xml" />
</xsd:schema>
<test xmlns="urn:schemas-microsoft-com:sql:SqlRowSet26">
  <Stuff>Stuff</Stuff>
  <xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet25" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" xmlns="" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet25" 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="test2">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="OtherStuff" minOccurs="0">
            <xsd:simpleType>
              <xsd:restriction base="sqltypes:varchar" 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>
  <test2 xmlns="urn:schemas-microsoft-com:sql:SqlRowSet25">
    <OtherStuff>OtherStuff</OtherStuff>
  </test2>
</test>

これは私が返す必要があるものです:

<xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet26" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet26" 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="test" type="sqltypes:xml" />
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="Stuff" minOccurs="0">
                <xsd:simpleType>
                    <xsd:restriction base="sqltypes:varchar">
                        <xsd:maxLength value="50"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
            <xsd:element name="test2">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="OtherStuff" minOccurs="0">
                            <xsd:simpleType>
                                <xsd:restriction base="sqltypes:varchar" 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:sequence>
    </xsd:complexType>
</xsd:schema>

SQL が返すのは、実際には構文的に正しくない XML です。2 つの ROOT 要素があってはなりません

どんな助けでも大歓迎です。

4

0 に答える 0