Я получаю IntelliSense
красную волнистую линию для следующего запроса в SSMS
версии 17.7 Microsoft SQL Server
2016 (SP2).После некоторых исследований выяснилось, что ошибка 493 и серьезность 16. Ошибка в запросе вызвана предложением where.
Запрос
SELECT
ClientID,
Person.query('..') AS Person
FROM ClientInfo CROSS APPLY
Info_untyped.nodes('/People/Person') AS People(Person)
where
Person.exist(
'/People/Person[@id=5678]') = 1
Ошибка 493
Столбец «Person», который был возвращен методом node (), нельзя использовать напрямую.Его можно использовать только с одним из четырех методов типа данных XML: exist (), node (), query () и value () или в проверках IS NULL и IS NOT NULL.
Тот же запрос в SSMS
версии 18 и Microsoft SQL Server
2016 (SP1) не имеет проблем.
Есть идеи почему?Как решить.
Спасибо
CREATE XML SCHEMA COLLECTION ClientInfoCollection AS
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:ClientInfoNamespace"
targetNamespace="urn:ClientInfoNamespace"
elementFormDefault="qualified">
<xsd:element name="People">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FirstName" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="LastName" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="FavoriteBook" type="xsd:string" minOccurs="0" maxOccurs="5" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:integer" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>'
GO
CREATE TABLE ClientInfo
(
ClientID INT PRIMARY KEY IDENTITY,
Info_untyped XML,
Info_typed XML(ClientInfoCollection)
);
INSERT INTO ClientInfo (Info_untyped, Info_typed)
VALUES
(
'<?xml version="1.0" encoding="UTF-8"?>
<People>
<Person id="1234">
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Person>
<Person id="5678">
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</Person>
</People>',
'<?xml version="1.0" encoding="UTF-8"?>
<People xmlns="urn:ClientInfoNamespace">
<Person id="1234">
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Person>
<Person id="5678">
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</Person>
</People>'
)
INSERT INTO ClientInfo (Info_untyped)
VALUES
(
'<?xml version="1.0" encoding="UTF-8"?>
<People>
<Person id="4321">
<FirstName>Jack</FirstName>
<LastName>Smith</LastName>
</Person>
<Person id="8765">
<FirstName>Jill</FirstName>
<LastName>Smith</LastName>
</Person>
</People>'
)