我正在尝试将@newLinks
插入@links
,但我不确定如何在以下sql中声明前缀“xsi”:
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]');
答案 0 :(得分: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>';