2015-11-30 1 views
0

У меня есть этот XML-структуру, которая у меня есть для синтаксического анализа в SQL Server и создать Where условие:Loop XML узлов и конкатенации в SQL Server

<Columns> 
    <Column name='Id' condition=' > ' value='20'> 
    <Column name='salary' condition=' < ' value= 20000> 
</Columns> 

Количество узлов столбцов может изменяться в 2,3,4 и т.д. .

Выход должен быть как:

Id > 20 and salary < 20000 

для этого я должен петли узлы столбцов и объединить атрибуты в одной строке where.

Используя следующую статью я могу читать XML: http://blog.sqlauthority.com/2009/02/13/sql-server-simple-example-of-reading-xml-file-using-t-sql/

Моя главная задача состоит в том, чтобы читать XML в эффективным образом.

ответ

2
DECLARE @xml XML = ' 
<Columns> 
    <Column name="Id" condition="&gt;" value="20" /> 
    <Column name="salary" condition="&lt;" value="20000" /> 
</Columns>' 

SELECT STUFF((
    SELECT ' AND [' + t.c.value('@name', 'SYSNAME') + '] ' + 
     t.c.value('@condition', 'SYSNAME') + ' ' + 
     t.c.value('@value', 'SYSNAME') 
    FROM @xml.nodes('Columns/Column') t(c) 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 5, '') 

результат -

[Id] > 20 AND [salary] < 20000 
Смежные вопросы