2009-09-04 88 views
5
<game xmlns="http://my.name.space" ></game> 

這是我的根元素。我已經寫了一個存儲過程來插入元素。綜上所述存儲過程,這裏的SQL無名稱空間的XQuery插入SQL2008

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確實插入一個空的命名空間也被插入這樣的結果是這樣的

<move xmlns=""> 
    <player>black</player> 
    <piece>king</piece> 
    <start>E7</start> 
    <end>E6</end> 
</move> 

現在我同時使用

嘗試
WITH XMLNAMESPACES(DEFAULT 'http://my.name.space') 

GameHistory.modify('declare default element namespace "http://my.name.space"; insert ...') 

但是我最終得到了各處的前綴和每個元素的名稱空間聲明。

代碼庫中出現的問題缺乏處理MSSQL放入的前綴的邏輯。最後,我只是想將一個新元素插入到我的xml根目錄並將名稱空間留空(使用根目錄默認值?)。我都很新,但據我瞭解,如果我在根元素中有一個命名空間,是否所有的孩子節點都不應該有一個默認的根空間?

回答

2
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; 

這將產生:

<game xmlns="http://my.name.space"> 
    <move> 
    <player>black</player> 
    <piece>pawn</piece> 
    <start>E7</start> 
    <end>E6</end> 
    </move> 
</game> 

兩個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; 
3

OK,這個工作對我來說:

帖子的
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 
+0

都工作100% 我發現是,雖然打破我的問題。 作爲最後進入(/遊戲)[0]應該作爲最後進入(/遊戲)[1] 不是[0]代表第一個項目的發生?就像一個基於零的數組? – Matt 2009-09-04 20:28:54

+1

@RBarry:你爲什麼更喜歡'/ *:node'?這是否意味着'具有*任何*名稱空間的遊戲節點'? – 2009-09-04 20:41:32

+0

馬特:不,是序數:[1]是第一個例子。 – RBarryYoung 2009-09-04 22:59:37

相關問題