sql >> Database >  >> RDS >> Sqlserver

Hoe de 'XQuery' SQL te optimaliseren

Als u slechts één waarde uit elke rij wilt, hoeft u cross apply niet te gebruiken .

select XMLCol.value('(/*[local-name()=sql:variable("@Root")]
                      /*[local-name(.)=sql:variable("@Entity")]
                      /*[local-name(.)=sql:variable("@ParentNode")]
                      /*[local-name(.)=sql:variable("@Separator")]
                      /*[local-name(.)=sql:variable("@ChildNode")])[1]', 'varchar(max)')
from XMLTable

Een andere manier om hetzelfde te krijgen is door FLWOR te gebruiken. . In mijn beperkte tests zal dit iets sneller werken.

select XMLCol.value('(for $n1 in /*,
                          $n2 in $n1/*,
                          $n3 in $n2/*,
                          $n4 in $n3/*,
                          $n5 in $n4/*
                      where $n1[local-name(.) = sql:variable("@Root")] and
                            $n2[local-name(.) = sql:variable("@Entity")] and
                            $n3[local-name(.) = sql:variable("@ParentNode")] and
                            $n4[local-name(.) = sql:variable("@Separator")] and
                            $n5[local-name(.) = sql:variable("@ChildNode")]
                      return $n5
                     )[1]', 'varchar(max)')
from XMLTable



  1. MySQL-server is verdwenen - over precies 60 seconden

  2. Haal de oudste datetime-waarde op met mysql

  3. Wijzig de weergave-indeling van het datum- en tijdveld in MySQL PHP

  4. Gegevens uit 5 tabellen samenvoegen zonder dubbele waarden en resultaat krijgen met aangepaste status in Oracle 10g