2010-05-19 3 views
1

XML을 SQL 2005에 저장하려고합니다. 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 속성을 다른 것으로 변경하면 내 쿼리가 작동합니다.

SQL이 네임 스페이스를 사용하여 수행하는 작업을 이해하기에 충분하지 않다고 생각합니다. 그러나 그것을 처리하고 다르게 그것을 저장해야합니다? 누구든지이 문제가 있었습니까? 이런 식으로 뭔가를 - - 당신은 당신의 XML 노드의 XML 네임 스페이스가있는 경우

답변

1

, 당신은 쿼리 할 때 것을 사용할 필요가 같이 로컬로 직접 하나 하나 .query() 또는 .value() 기능에 :

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

(여기 참조 당신이 XML 네임 스페이스를 많이 참조해야하는 경우이 방법에 대한 자세한 내용)에 대한 SQL Server Books Online에, 또는, 당신은 또한 범위로 정의 할 수 있습니다 :

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

WITH XMLNAMESPACES에 대한 세부 사항을 참조하십시오 에 MSDN SQL Server Books Online

+1

그것은 완벽하게, 감사합니다. 또한 코드 예제는 꿈처럼 작동합니다. –