2013-01-24 6 views
2
<Findings> 
    <Finding EcinRecordID="1042893"> 
     <Name>Goal Length of Stay for the ORG</Name> 
     <Selected Value="0" DisplayValue="No"/> 
    </Finding> 
    <Finding EcinRecordID="1042894"> 
     <Name>Goal Length of Stay for the GRG</Name> 
     <Selected Value="1" DisplayValue="Yes"/> 
     <NoteText>3 days</NoteText> 
    </Finding> 
</Findings> 

2 개 도전 한 이유는 연구 결과의SQL 선택 XML 노드 값을

  1. 선택 노드 값을/발견/찾기 선택/찾기/이름 값 = "1"
  2. 선택 노드 Findings/Finding/NoteText 결과/발견/선택 값 = "1"

저장 프로 시저에 넣습니다. 나는 쿼리, 존재 및 가치를 사용하여 적어도 3 다스 버전을 시도했다. Selected Value가 '1'인지 여부는 확인할 수 있지만 Select 문에 해당 Name 값을 할당 할 수는 없습니다.

SELECT 
    p.value('(Payments[1]/Payment[1]/PreAuthCertNumber)[1]', 'varchar(20)') AS PriorAuthNumber 
    ,qa.value('(Name[1])','varchar(255)') AS Question 
    ,qa.value('(Findings/Finding/Name)[1]','varchar(255)') AS Answer 
    FROM #ValueExample 
    CROSS APPLY XMLDocument.nodes('/OutboundDataFeed/Patient/PatientAdmission') as t(p) 
    CROSS APPLY XMLDocument.nodes('/OutboundDataFeed/Patient/PatientAdmission/CMAssessments/CMAssessment/Sections/Section/Questions/Question') as u(qa) 

고마워요!

답변

6
declare @XML xml 

set @XML = ' 
<Findings> 
    <Finding EcinRecordID="1042893"> 
     <Name>Goal Length of Stay for the ORG</Name> 
     <Selected Value="0" DisplayValue="No"/> 
    </Finding> 
    <Finding EcinRecordID="1042894"> 
     <Name>Goal Length of Stay for the GRG</Name> 
     <Selected Value="1" DisplayValue="Yes"/> 
     <NoteText>3 days</NoteText> 
    </Finding> 
</Findings>' 

select @XML.value('(/Findings/Finding[Selected/@Value = "1"]/Name/text())[1]', 'varchar(255)') as Name, 
     @XML.value('(/Findings/Finding[Selected/@Value = "1"]/NoteText/text())[1]', 'varchar(255)') as NoteText 

는 결과 : 제가 작업 한이있는 XML 필드의 쿼리에서이 솔루션을 구현하려고 갔을 때 참고

Name          NoteText 
---------------------------------------- ------------------------- 
Goal Length of Stay for the GRG   3 days 
+0

대단하다! 정말 고맙습니다! – user2005792

2

, 나는 발견 미카엘 에릭손 감독의 대답에서 제공되는 구문 위의 나를 위해 작동하지 않았다. 구조가 정확하고 잘 형성되었다는 것을 두 번 확인했지만 결과가 null 일뿐입니다.

제공 (미카엘 에릭손 감독의 대답에서 냈다)이었다로서 구문 :

select @XML.value('(/Findings/Finding[Selected/@Value = "1"]/Name/text())[1]', 'varchar(255)') as Name, 
     @XML.value('(/Findings/Finding[Selected/@Value = "1"]/NoteText/text())[1]', 'varchar(255)') as NoteText 

내가 무엇을 발견 실제로 내 자신의 코드 아니었다 나를 위해 일을 분명히 (다음과 같이 약간 수정하는 것이었다했다 , 일관성을 위해) :

select @XML.value('(/Findings/Finding/Selected[@Value = "1"]/Name/text())[1]', 'varchar(255)') as Name, 
     @XML.value('(/Findings/Finding/Selected[@Value = "1"]/NoteText/text())[1]', 'varchar(255)') as NoteText 

그냥 내가 생각했던 것과 똑같은 경험을 할 수있는 다른 사람들을위한 대안으로 게시 할 것이라고 생각했습니다.

+0

감사합니다. @ wildwend, 나는 당신과 같은 문제에 부딪 혔습니다. – cBlaine