Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách tối ưu hóa SQL 'XQuery'

Nếu bạn chỉ muốn một giá trị trong mỗi hàng thì không cần sử dụng 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

Một cách khác để có được điều tương tự là sử dụng FLWOR . Trong các thử nghiệm giới hạn của tôi, điều này sẽ chạy nhanh hơn một chút.

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. Làm cách nào để bạn đếm số lần xuất hiện của một chuỗi con nhất định trong một varchar SQL?

  2. Cách thêm Ràng buộc Mặc định vào các Cột hiện có trong Bảng SQL Server - Hướng dẫn SQL Server / TSQL Phần 91

  3. So sánh các chuỗi được phân tách bằng dấu phẩy trong SQL

  4. Sử dụng T-SQL, trả về phần tử được phân tách thứ n từ một chuỗi

  5. Các cách duy trì lịch sử dữ liệu trong cơ sở dữ liệu SQL Server 2008