2012-05-08 2 views
4

나는 다음과 같은 XML 메시지가 :T-SQL에서 XML 데이터에 가입

DECLARE @XML AS XML 
SET @XML = 
'<Message> 
<Changes> 
    <Deleted> 
     <ROW id="1" name="Nicole" surname="Bartlett" city="denver" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" /> 
     <ROW id="1" name="Nicole" surname="Bartlett" city="boston" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" /> 
    </Deleted> 
    <Inserted> 
     <ROW id="1" name="Nicole" surname="Bartlett" city="denver" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" /> 
     <ROW id="1" name="Nicole" surname="Bartlett" city="boston" balance="779.4663" dateOfBirth="1991-12-11T14:05:42.830" maritalStatus="S" /> 
    </Inserted> 
</Changes> 
</Message>' 

을 그리고 나는이 메시지에서 데이터를 선택하고 id 필드에 다른 테이블에 가입해야합니다. 다음 코드는 작동하지 않습니다.

SELECT T.c.value('./@id', 'int') as id, t.c.value('./@name', 'varchar(max)') as name 
FROM @XML.nodes('/Message/Changes/Deleted/ROW') T(c) 
inner join other_table tbl 
    on tbl.id = id 

어떻게하면됩니까?

답변

9
SELECT T.c.value('./@id', 'int') as id, t.c.value('./@name', 'varchar(max)') as name 
FROM @XML.nodes('/Message/Changes/Deleted/ROW') T(c) 
inner join other_table tbl 
    on tbl.id = T.c.value('./@id', 'int')