SQL服务器支持XML,但我无法弄清楚如何使用列表类型
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema id="XMLSchema1"
targetNamespace="http://tempuri.org/XMLSchema1.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema1.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="valuelist">
<xsd:list itemType="xsd:integer"/>
</xsd:simpleType>
<xsd:element name="a" type="valuelist"/>
我无法弄清楚如何使这项工作:
DECLARE @p0 AS XML
SET @p0 = '<a>123 124</a>'
select ??? from @p0.???
这个工作正常,但每个数字额外增加6个字符:
DECLARE @p0 AS XML
SET @p0 = '<b>123</b><b>124</b>'
select T.c.value('.', 'int') as Id from @p0.nodes('/b') AS T(c)
答案 0 :(得分:1)
这是一个完整的例子:
DECLARE @Schema XML
SET @Schema = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="a">
<xs:simpleType>
<xs:list itemType="xs:int" />
</xs:simpleType>
</xs:element>
</xs:schema>'
CREATE XML SCHEMA COLLECTION exampleschema as @Schema;
GO
DECLARE @XmlDoc AS XML(exampleschema)
SET @XmlDoc = '<a>123 456 789</a>'
select T.ref.value('.', 'int')
from
(
select [Xml]=@XmlDoc.query('
for $i in data(/a) return
element temp { $i }
')
) A
CROSS APPLY A.Xml.nodes('/temp') T(ref)
DROP XML SCHEMA COLLECTION exampleschema
GO
这几乎是从展示该方法的this MSDN博客中获取的。