2011-10-05 82 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>'; 
相关问题