2011-10-05 83 views
2

我試圖插入@newLinks@links但我不知道如何申報下列SQL前綴「XSI」時申報命名空間:如何使用SQL變量插入多個XML節點

declare @links xml 
set @links = N'<Links/>'; 

declare @newLinks xml 
set @newLinks = N' 
<Link xsi:type="CustomLink"> 
    <Name>Foo</Name> 
</Link> 
<Link xsi:type="CustomLink"> 
    <Name>Bar</Name> 
</Link>'; 

set @links.modify(' 
insert sql:variable("@newLinks") 
into (/Links)[1]'); 

select @links; 

執行上面的SQL結果在下面的錯誤:

XML parsing: line 2, character 28, undeclared prefix 

我嘗試沒有運氣以下:

set @links.modify(' 
declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; 
insert sql:variable("@newLinks") 
into (/Links)[1]'); 

回答

2

您可以在xml片段中使用xmlns屬性來定義xsi前綴。該聲明適用於所有子節點。您的片段中沒有根節點,因此您必須在兩個<link/>元素上定義它。

declare @newLinks xml 
set @newLinks = N' 
<Link 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:type="CustomLink"> 
    <Name>Foo</Name> 
</Link> 
<Link 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:type="CustomLink"> 
    <Name>Bar</Name> 
</Link>'; 
相關問題