SQL Server performance in xquery with for loop(带有 for 循环的 xquery 中的 SQL Server 性能)
问题描述
我有一个带有 xml 列的 sql 表,它保存的值类似于以下 xml 格式
I have one sql table with xml column, which holds the value like following xml format
<Security xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Dacl>
<ACEInformation>
<UserName>Authenticated Users</UserName>
<Access>Allow</Access>
<IsInherited>false</IsInherited>
<ApplyTo>This object only</ApplyTo>
<Permission>List Contents</Permission>
<Permission>Read All Properties</Permission>
<Permission>Read Permissions</Permission>
</ACEInformation>
<ACEInformation>
<UserName>Local System</UserName>
<Access>Allow</Access>
<IsInherited>false</IsInherited>
<ApplyTo>This object only</ApplyTo>
<Permission>Read All Properties</Permission>
<Permission>Read Permissions</Permission>
</ACEInformation>
</Dacl>
</Security>
在这里,我想从这样的 xml 列中获取输出
Here, I would like get output from xml column like this
[ Allow -> Authenticated Users -> List Contents;读取所有属性;读取权限;-> 仅此对象 ]
为了实现这一点,我使用以下 for 循环查询来连接值
To achieve this, I am using following for loop query to join values
SELECT xmlColumn.query('for $item in/Security/Dacl/ACEInformation return("[",data($item/Access)
[1],"->",data($item/UserName)[1],"->", (for $item2 in $item/Permission return concat($item2,";")),"-
>",data($item/ApplyTo)[1],"]")').value('.','NVARCHAR(MAX)')+' ; ' From myTable
查询工作正常,但给出结果花费了太多时间,对于 1000 行,需要 2 分钟...谁能帮助我提高此查询的性能?
The query is working fine, but it takes too much time to give result, for 1000 rows, it is taking 2 mins...can anyone help me to improve performance of this query?.
推荐答案
select (
select '['+
A.X.value('(Access/text())[1]', 'nvarchar(max)')+
'->'+
A.X.value('(UserName/text())[1]', 'nvarchar(max)')+
'->'+
(
select P.X.value('(./text())[1]', 'nvarchar(max)')+';'
from A.X.nodes('Permission') as P(X)
for xml path(''), type
).value('text()[1]', 'nvarchar(max)')+
'->'+
A.X.value('(ApplyTo/text())[1]', 'nvarchar(max)')+
']'
from T.xmlColumn.nodes('/Security/Dacl/ACEInformation') as A(X)
for xml path(''), type
).value('text()[1]', 'nvarchar(max)')
from myTable as T
这篇关于带有 for 循环的 xquery 中的 SQL Server 性能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:带有 for 循环的 xquery 中的 SQL Server 性能
基础教程推荐
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01