入れ子になった 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 要素があってはなりません
どんな助けでも大歓迎です。