2012-01-16 3 views
3

그래서 하루 종일 xpath/xquery를 SQL Server 쿼리의 일부로 사용하여 XML 데이터 열의 값을 쓸모 없게 만드는 좋은 예를 찾고 있습니다.SQL Server 테이블의 모든 행에 대해 XML 열의 특정 특성 값을 반환하려면 어떻게해야합니까?

다음은 내가하려는 일입니다. 나는 테이블의 XML 데이터 열에서 다음과 같은 XML이 : 나는 Document 노드의 ID 속성의 값을 반환하는 SQL Server 쿼리를 작성하는 것을 시도하고

<Document ID="156"> 
    <Version>1.0</Version> 
    <LastModifiedInVersion>1.0</LastModifiedInVersion> 
    <Signatures /> 
    <Controls> 
    <Control ID="TB1"> 
     <Value>Hello world!</Value> 
    </Control> 
    </Controls> 
    <AutoKeys /> 
</Document> 

. 테이블의 모든 행에 대해이 작업을 수행하려고하고 모든 XML 데이터가 정확히 동일한 형식으로 시작됩니다.

도움이 될 것입니다. 정말 깨끗한 예가 필요하고 거기에서 가져갈 수 있습니다!

답변

8

그래서 테이블의 XML 열에있는 전체 XML은 무엇입니까 ?? 이런 경우에

, 사용 뭔가 다음 .value() 전화는 기본적으로 첫 번째 매개 변수와 두 번째 매개 변수로 T-SQL 유형으로는 XPath 소요되며,

SELECT 
    (list of other columns), 
    XmlColumn.value('(/Document/@ID)[1]', 'int') AS 'DocumentID' 
FROM 
    dbo.YourTable 

는 등 그 XML 값을 반환 주어진 T-SQL 데이터 유형을 쿼리에 추가합니다.

+2

+0 그것을 즉시 조회 - 내가 당신을 기억하는 것 : – JNK

+0

모든 표가 있다면 내가 upvote에 것 루트 요소에서 속성을 가져올 수 없습니다. –

+0

@JeremyHolovacs : 확실합니까 ??? 내 컴퓨터에서 SQL Server 2008 R2 (Mgmt Studio)에서 제대로 작동합니다. 시도해보십시오! –

0
SELECT xmlcol.value('(//Document/@ID)[1]','int') AS DocID FROM xmltable 
1

당신의 XML은 일반 문자열로 데이터베이스에 저장되어있는 경우, 변환 및

SELECT CONVERT(XML, [XMLStringColumn]).value('(/Document/@ID)[1]', 'int') 
FROM yourTable 
관련 문제