首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带命名空间SQL2008的XQuery插入

不带命名空间SQL2008的XQuery插入
EN

Stack Overflow用户
提问于 2009-09-04 18:35:29
回答 2查看 3K关注 0票数 5
代码语言:javascript
复制
<game xmlns="http://my.name.space" ></game>  

这是我的根元素。我已经编写了一个存储过程来向其中插入元素。为了总结这个存储过程,下面是SQL

代码语言:javascript
复制
UPDATE ChessGame SET GameHistory.modify('insert <move><player>black</player><piece>pawn</piece><start>E7</start><end>E6</end></move> as last into (/game)[0]') WHERE Id = @GameId;

现在,当MSSQL执行插入操作时,还会插入一个空的命名空间,因此结果如下所示

代码语言:javascript
复制
<move xmlns="">
  <player>black</player>
  <piece>king</piece>
  <start>E7</start>
  <end>E6</end>
</move>

现在我已经尝试使用这两种方法

代码语言:javascript
复制
WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')

代码语言:javascript
复制
GameHistory.modify('declare default element namespace "http://my.name.space"; insert ...')

但是我最后到处都是前缀,每个元素都有一个名称空间声明。

缺少处理MSSQL输入的前缀的逻辑的代码库中会出现问题。最后,我只想在xml根目录中插入一个新元素,并将名称空间保留为空(使用根目录default?)。我对此非常陌生,但据我所知,如果我在根元素中有一个名称空间,那么不是所有的子节点都应该有一个默认的根名称空间吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-04 19:17:58

代码语言:javascript
复制
declare @x xml;
select @x='<game xmlns="http://my.name.space" ></game>';
set @x.modify('declare default element namespace "http://my.name.space"; 
    insert <move><player>black</player><piece>pawn</piece>
     <start>E7</start><end>E6</end></move> as last into (/game)[1]');
select @x;

这会产生以下结果:

代码语言:javascript
复制
<game xmlns="http://my.name.space">
  <move>
    <player>black</player>
    <piece>pawn</piece>
    <start>E7</start>
    <end>E6</end>
  </move>
</game>

在SQL2005 SP2和SQL2008 SP1上。

此外,此表更新也可以正常工作:

代码语言:javascript
复制
declare @t table (x xml);
insert into @t (x) values ('<game xmlns="http://my.name.space" ></game>');
update @t
set x.modify('declare default element namespace "http://my.name.space"; 
    insert <move><player>black</player><piece>pawn</piece>
       <start>E7</start><end>E6</end></move> as last into (/game)[1]');
select * from @t;
票数 2
EN

Stack Overflow用户

发布于 2009-09-04 19:25:45

好的,这对我很有效:

代码语言:javascript
复制
DECLARE @x XML;
SET @x = '<game xmlns="http://my.name.space" ></game>';

select @x

SET @x.modify(
    ' declare default element namespace "http://my.name.space";
    insert <move><player>black</player><piece>pawn</piece><start>E7</start><end>E6</end></move> as last into (/*:game)[1]'
    )

select @x
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1380858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档