Mat*_*att 5 xml sql t-sql sql-server xquery
<game xmlns="http://my.name.space" ></game>
Run Code Online (Sandbox Code Playgroud)
这是我的根本要素.我编写了一个存储过程来插入元素.总结存储过程,这是SQL
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;
Run Code Online (Sandbox Code Playgroud)
现在,当MSSQL插入时,还会插入一个空名称空间,因此结果就是这样
<move xmlns="">
<player>black</player>
<piece>king</piece>
<start>E7</start>
<end>E6</end>
</move>
Run Code Online (Sandbox Code Playgroud)
现在我尝试过使用它们
WITH XMLNAMESPACES(DEFAULT 'http://my.name.space')
Run Code Online (Sandbox Code Playgroud)
和
GameHistory.modify('declare default element namespace "http://my.name.space"; insert ...')
Run Code Online (Sandbox Code Playgroud)
但我到处都是前缀,每个元素都有一个命名空间声明.
代码库中出现问题,这些代码库缺少处理MSSQL输入的前缀的逻辑.最后,我只想在我的xml根中插入一个新元素并将命名空白留空(使用root默认值?).我对这一点都很陌生,但据我所知,如果我的根元素中有一个命名空间,那么所有的子节点都不应该有我的root的默认命名空间吗?
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;
Run Code Online (Sandbox Code Playgroud)
这会产生:
<game xmlns="http://my.name.space">
<move>
<player>black</player>
<piece>pawn</piece>
<start>E7</start>
<end>E6</end>
</move>
</game>
Run Code Online (Sandbox Code Playgroud)
在 SQL 2005 SP2 和 SQL 2008 SP1 上。
此表更新也工作正常:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |