【发布时间】:2015-02-17 02:24:18
【问题描述】:
下面的脚本可用于显示我遇到的问题的示例。该脚本将返回错误“没有名为'this'的元素”。
如果我将@XML 变量的声明更改为无类型XML(将DECLARE @XML XML(Test) 行替换为DECLARE @XML XML),我不会收到错误消息,而是会得到预期的结果。
为什么在使用 Schema 集合时会出现错误,如何避免它 - 我想用正确类型的 xml 填充表列,但我无法从列中取回数据。
IF EXISTS (SELECT name FROM sys.xml_schema_collections WHERE name = 'test') DROP XML SCHEMA COLLECTION Test
CREATE XML SCHEMA COLLECTION Test AS
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:t="http://tempuri.org/this.xsd"
targetNamespace="http://tempuri.org/this.xsd"
elementFormDefault="qualified">
<xsd:element name ="this">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="What" minOccurs="1" maxOccurs="1" >
<xsd:simpleType>
<xsd:restriction base ="xsd:string">
<xsd:enumeration value ="01."/>
<xsd:enumeration value ="02."/>
<xsd:enumeration value ="03."/>
<xsd:enumeration value ="04."/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="When" minOccurs="1" maxOccurs="1" >
<xsd:simpleType>
<xsd:restriction base ="xsd:string">
<xsd:enumeration value ="01."/>
<xsd:enumeration value ="02."/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Outcome" minOccurs="1" maxOccurs="1" >
<xsd:simpleType>
<xsd:restriction base ="xsd:string">
<xsd:enumeration value ="one"/>
<xsd:enumeration value ="two"/>
<xsd:enumeration value ="whatever"/>
<xsd:enumeration value =""/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>'
GO
DECLARE @XML XML(Test)
SET @XML =
'<this xmlns="http://tempuri.org/this.xsd">
<What>02.</What>
<When>01.</When>
<Outcome></Outcome>
</this>'
SELECT @XML
SELECT
Field.value('What[1]','VARCHAR(100)')
FROM @Xml.nodes('/this') AS this(Field)
【问题讨论】:
标签: sql xml sql-server-2008 xsd xquery