Как объявить пространство имен при использовании переменной SQL для вставки нескольких узлов XML - PullRequest
2 голосов
/ 05 октября 2011

я пытаюсь вставить @newLinks в @links, но я не уверен, как объявить префикс "xsi" в следующем sql:

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]');

1 Ответ

2 голосов
/ 05 октября 2011

Вы можете использовать атрибут xmlns в своем фрагменте xml для определения префикса 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>';
...