2

我正在尝试插入@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]');
4

1 回答 1

2

您可以使用xmlnsxml 片段中的属性来定义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>';
于 2011-10-05T00:49:59.000 回答