SQL Server XSD SimpleType xs: список в виде таблицы? - PullRequest
1 голос
/ 04 февраля 2010

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)

1 Ответ

1 голос
/ 06 февраля 2010

Вот полностью рабочий пример:

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

Это в значительной степени взято из этого блога MSDN, который демонстрирует подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...