T-SQL Динамический xquery - PullRequest
       30

T-SQL Динамический xquery

0 голосов
/ 20 августа 2010

Я пытаюсь выяснить, как я могу загрузить переменную таблицы с данными из XML, используя динамический xquery?Я получаю результирующий набор узлов из запроса и определяю тип значения этих узлов.Похоже, что это определение значения узлов, на которых оно взрывается.

Вот пример сценария, который работает, но не является динамическим.

Сценарий:

DECLARE @XML XML = '<root>
                      <data>
                         <list id="organization" label="Organization">
                                  <options>
                                    <item value="1" label="Organization1" selected="false" />
                                    <item value="2" label="Organization2" selected="false" />
                                    <item value="3" label="Organization3" selected="false" />
                                    <item value="4" label="Organization4" selected="true" />
                                    <item value="5" label="Organization5" selected="true" />
                                  </options>
                          </list>
                      </data>
                    </root>';


DECLARE @Orgs       TABLE (ID INT);

Insert Into @Orgs(ID) Select OrgNameIdNodes.ID.value('@value','int') from @xml.nodes('//*[@id="organization"]//item[@selected="true"]') as OrgNameIdNodes(ID);

Select *
from @orgs

То, что я хотел бы сделать, это передатьпараметры для обоих значений и разделов @ xml.nodes, поэтому у меня будет что-то вроде:

Insert Into @Orgs(ID) Select OrgNameIdNodes.ID.value(@Value) from @xml.nodes(@Nodes) as     OrgNameIdNodes(ID);

Возможно ли это?

1 Ответ

2 голосов
/ 20 августа 2010

Как насчет использования sp_executesql с динамическим sql. Что-то вроде:

DECLARE @XML XML = '<root> 
                      <data> 
                         <list id="organization" label="Organization"> 
                                  <options> 
                                    <item value="1" label="Organization1" selected="false" /> 
                                    <item value="2" label="Organization2" selected="false" /> 
                                    <item value="3" label="Organization3" selected="false" /> 
                                    <item value="4" label="Organization4" selected="true" /> 
                                    <item value="5" label="Organization5" selected="true" /> 
                                  </options> 
                          </list> 
                      </data> 
                    </root>'; 

declare @orgs table(ID int);

declare @nodes nvarchar(4000),
        @value nvarchar(4000),
        @query nvarchar(4000)

select @value = '''@value'',''int'''
select @nodes = '//*[@id="organization"]//item[@selected="true"]'

select @query = 'Select OrgNameIdNodes.ID.value( ' + @value + ') ' +
                'from @xml.nodes(''' + @nodes + ''') as OrgNameIdNodes(ID)'

insert into @Orgs(ID) EXEC sp_executesql @query, N'@xml xml', @xml = @xml

Select * 
from @orgs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...