2010-05-19 66 views
1

我試圖在SQL 2005中存儲XML。我有一個非常簡單的表,其中包含一個Id和一個XML列。在SQL 2005中存儲XML XMLNS問題

當XML包含屬性xmlns時,我的搜索不起作用。

這是我的XML;

insert into XMLTest (ItemXML) values ( 
'<MessageType> 
    <ItemId id="ABC" xmlns="ss" /> 
    <Subject>sub</Subject> 
</MessageType> 
') 

這是我的查詢;

select itemid, ItemXML.query('(/MessageType/ItemId)') from XMLTest order by ItemId desc 

如果我將屬性xmlns更改爲其他任何我的查詢工作。

我不認爲我對XML有足夠的瞭解,以瞭解SQL在命名空間中所做的事情。但它必須處理它並以不同的方式存儲它?任何人有這個問題?

回答

1

如果你有你的XML節點上的XML命名空間,您需要使用查詢時 - 這樣的事情 - 無論是直接在每一個.query().value()功能在本地是這樣的:

SELECT 
    itemid, 
    ItemXML.query('declare namespace x="ss";(/MessageType/x:ItemId)') 
FROM 
    XMLTest 
ORDER BY 
    ItemId DESC 

(見這裏在SQL Server Books Online有關此方法的更多信息),或者如果你需要引用XML命名空間很多,你也可以將它定義爲一個範圍:

WITH XMLNAMESPACES('ss' as x) 
SELECT 
    itemid, 
    ItemXML.query('(/MessageType/x:ItemId)') 
FROM 
    XMLTest 
ORDER BY 
    ItemId DESC 

查看有關WITH XMLNAMESPACES細節on MSDN SQL Server Books Online

+1

這是完美的,謝謝。 此外你的代碼示例像夢一樣工作。 – 2010-05-19 15:36:36