XML 테이블에 XML 필드가 있습니다. 여기에 주어진 키와 주어진 값을 가진 몇 개의 키/값이 이미 내 테이블에서 사용되는지 알아야합니다.사전 내에서 다음 태그 찾기
여기 내 테이블 (간체)입니다.
dbo.mytable :
기본 키, INT NULL NOT
xml_data,
그리고 xml_data 필드는 다음 XSN로 특징 지어된다 (예를 들어)이 주어진 XML에 대한
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="a">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:element name="b" type="NonEmptyString" />
<xsd:element name="c" type="NonEmptyString" />
<xsd:element name="d" type="NonEmptyString" />
<xsd:element name="e" type="xsd:dateTime" />
<xsd:element name="dict">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:choice maxOccurs="unbounded">
<xsd:sequence>
<xsd:element name="key" type="NonEmptyString" />
<xsd:element name="value" type="xsd:string" />
</xsd:sequence>
</xsd:choice>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="version" type="xsd:float" />
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="NonEmptyString">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
:
<a>
<b>Value</b>
<c>Value</c>
<d>Value</d>
<e>2017-02-14T00:00:00</e>
<dict>
<key>myKey</key>
<value>myValue</value>
<key>anotherKey</key>
<value>myValue</value>
</dict>
</a>
테이블에 첫 번째 키 "myKey"의 값이 "myValue"인지 확인해야합니다.
나는 [xml_data].exist()
함수를 사용할 수 있다고 생각하지만, 내 XQuery가 어떻게 형성되어야하는지에 대한 문제가 있습니다.
for $key in /a/dict/key where data($key) = ''myKey'' return $key
을하지만 다음 태그를 얻는 방법을 알아낼 수 없습니다. 는 "hypotethically"무언가 같이 줄 수
:
SELECT [xml_data].exist('
for $key
in /a/dict/key
where data($key) = ''myKey''
return $key.followingTag == ''myValue''
') FROM dbo.mytable;
참고 : https://msdn.microsoft.com/en-us/library/ms189869.aspx