介绍
我正在尝试查询 SQL Server 2008 中的 xml 列,但出现无法修复的错误。
这是我使用的架构:
CREATE XML SCHEMA COLLECTION PublicationSchema AS '
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
<xs:element name="publication">
<xs:complexType>
<xs:sequence>
<xs:element ref="metadata"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="meta">
<xs:complexType>
<xs:attributeGroup ref="attlist-meta"/>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="attlist-meta">
<xs:attribute name="name" use="required"/>
<xs:attribute name="content"/>
<xs:attribute name="scheme"/>
</xs:attributeGroup>
<xs:element name="metadata">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="meta"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>'
GO
我使用架构创建带有 XML 列的表:create table test (content XML(PublicationSchema))
我插入一些数据:
insert into test values(N'<?xml version="1.0" encoding="UTF-16"?>
<publication>
<metadata>
<meta name="type" content="plan" scheme="city"/>
<meta name="statistics" content="second" scheme="informationtype"/>
</metadata>
</publication>')
问题
当我执行查询时:
select * from test
where Content.exist('/publication/metadata/meta[@name] = "type"') = 1
我收到此错误:
Msg 2213, Level 16, State 1, Line 3
XQuery [test.content.exist()]: Cannot atomize/apply data()
on expression that contains type 'meta' within inferred
type 'element(meta,#anonymous) *'
问题
有谁知道我可以做些什么来解决这个查询?