2010-08-20 58 views
0

我想弄清楚如何使用動態xquery將我的表變量與來自XML的數據加載?我從查詢中獲取結果集並定義這些節點的值類型。它似乎是它正在炸燬的節點的價值定義。T-SQL動態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); 

這可能嗎?

回答

2

如何使用動態sql使用sp_executesql。例如:

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 
+0

完美的謝謝Garett – scarpacci 2010-08-20 18:12:59