2013-11-25 3 views
1

У меня есть один SQL таблицу с колонкой XML, который содержит значение, как показано ниже XMLXQuery где проверить проблему производительности с SQL Query

<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>Administrator</UserName> 
     <Access>Allow</Access> 
     <IsInherited>false</IsInherited> 
     <ApplyTo>This object only</ApplyTo> 
     <Permission>Read All Properties</Permission> 
     <Permission>Delete</Permission> 
    </ACEInformation> 
    <ACEInformation> 
     <UserName>Admin2</UserName> 
     <Access>Allow</Access> 
     <IsInherited>false</IsInherited> 
     <ApplyTo>This object only</ApplyTo> 
     <Permission>Read All Properties</Permission> 
     <Permission>Delete</Permission> 
    </ACEInformation> 
    </Dacl> 
</Security> 

Здесь моя потребность, я должен запросить все значения UserName, которые имеют значения Доступ: Разрешить и Разрешение: Удалить. Для этого я использую следующий XQuery.

Select xmlColumn.query('for $item in (/Security/Dacl/ACEInformation[Access="Allow"][Permission="Delete"]/UserName) return concat($item,";")').value('.','NVARCHAR(MAX)') from myTable 

Он возвращает значение: администратора; ADMIN2 для выше XML. запрос работает нормально ... но производительность очень низкая, он занимает 1 минуту на 1000 строк.

Можете ли вы предоставить лучший xquery для этого случая?

ответ

1

Никаких реальных изменений в xQuery, но я изменил concat на for xml concat instaed.

select (
     select A.X.value('(UserName/text())[1]', 'nvarchar(max)')+';' 
     from T.xmlColumn.nodes('/Security/Dacl/ACEInformation[Access = "Allow" and Permission = "Delete"]') as A(X) 
     for xml path(''), type 
     ).value('text()[1]', 'nvarchar(max)') 
from myTable as T 
+0

Благодаря Микаэл .it хорошо работает и проблема производительности мой PBM не в запросе – kombsh

+0

Привет Микаэля, у меня есть еще один вопрос, может вас Помоги мне? пожалуйста, проверьте этот вопрос --- --- http://stackoverflow.com/questions/20188220/xquery-exists-check-in-select-sql-query – kombsh

1

Я не думаю, что есть проблема в XQuery, вы можете изменить его немного, хотя ([Access="Allow"][Permission="Delete"] =>[Access="Allow" and Permission="Delete"]).

На 1000 строк ваш запрос работает довольно быстро на SQL скрипкой - см sql fiddle demo

+0

спасибо за ваш ответ – kombsh

 Смежные вопросы

  • Нет связанных вопросов^_^