2009-09-03 30 views
0

這裏是我的測試SQL查詢SQLXML在我在SQL Server 2008中的小問題與SQLXML SQL服務器

DECLARE @XMLTable TABLE(GameHistory XML) 
INSERT INTO @XMLTable VALUES('<game xmlns="http://my.name.space"> 
     <move> 
     <player>white</player> 
     <piece>pawn</piece> 
     <start>A2</start> 
     <end>A3</end> 
     </move> 
     <move> 
     <player>black</player> 
     <piece>pawn</piece> 
     <start>D7</start> 
     <end>D6</end>  
     </move> 
    </game>') 

SELECT GameHistory.query('/game/move[1]') FROM @XMLTable 

現在,如果我拿出了命名空間(XMLNS =「HTTP://我的。 name.space「)部分我的查詢工作正常。爲什麼刪除命名空間解決了這個問題?

+0

這實際上不是SQLXML。這是原生的XML數據類型,從SQL Server 2005起就是新的。 – 2009-09-03 21:30:09

回答

2

你的SELECT詢問元素/game/move(其中兩個gamemove沒有命名空間),並且您沒有在你的XML有這樣的元素。您需要詢問正確的元素,即命名空間http://my.name.space中的/game/move。使用WITH XMLNAMESPACES

;WITH XMLNAMESPACES(DEFAULT 'http://my.name.space') 
SELECT GameHistory.query('/game/move[1]') FROM @XMLTable 
+0

非常感謝您的解決方案!我對這個東西太陌生了。 – Matt 2009-09-03 21:53:04

+0

+1。我不知道那件事。 – David 2009-09-03 22:16:16

1

的問題是,你的XPath不指定一個名稱空間,這樣的「遊戲」的元素不匹配,因爲它們的命名空間是不同的。您需要在XPath中指定命名空間以使它們匹配:

SELECT @x.query('declare namespace x="http://my.name.space"; /x:game/x:move[1]') 
+0

+1在xquery/xpath中聲明名稱空間也是正確的 – 2009-09-03 21:41:56