То, как XML-движок SQL-Server работает с пространствами имен, - в некоторых случаях - довольно раздражает ... Важно сказать, что вышеприведенное не является неправильным ... Повторять объявление пространства имен вполне нормально, но это вздутие живота в результате людям трудно читать и понимать XML, и он может потерпеть неудачу в (в) строгих валидаторах.
Причина в том, что такой XML всегда завершен. Вы можете разместить его где угодно в XML.
В вашем случае вы получите результат так, как вам хочется, заранее сообщив движку о пространстве имен:
неявное объявление
UPDATE #C
SET X.modify('declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";
insert <Setting key="about" display="About" group="service" enabled="true">
<Value xsi:type="xsd:string">string of text about {sql:variable("@name")} here.</Value>
</Setting>
as last into (/Test[1])');
или WITH XMLNAMESPACES()
:
WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema-instance' AS xsi)
UPDATE #C
SET X.modify('insert <Setting key="about" display="About" group="service" enabled="true">
<Value xsi:type="xsd:string">string of text about {sql:variable("@name")} here.</Value>
</Setting>
as last into (/Test[1])');