Ошибка SQL Server 493, отображаемая в некоторых версиях SSMS - PullRequest
0 голосов
/ 05 июля 2019

Я получаю 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>'
    )
...