Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да оптимизирате SQL 'XQuery'

Ако искате само една стойност от всеки ред, няма нужда да използвате cross apply .

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

Друг начин да получите същото е да използвате FLWOR . В моите ограничени тестове това ще работи малко по-бързо.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кодови първи миграции и съхранени процедури

  2. Конфигуриране на доставка на регистрационни файлове на SQL Server

  3. Вмъкване на изображение в базата данни на SQL Server 2008 Express без предно приложение

  4. Изчисляване на дни с изключение на почивните дни (от понеделник до петък) в SQL Server

  5. Грешка при отваряне на главния ключ на SQL Server 2008 при промяна на физическия сървър