2009-11-13 1 views
0

XML 데이터 형식 인 열이 포함 된 테이블이 있습니다. XML 데이터 형식 열을 포함하여 전체 테이블을 볼 수 있습니다. 뷰는 XML 데이터 형식 열의 내용을 확장합니다. 전체 XML 문서를 탐색하여 특정 XML 노드에서 값을 가져 오는 데 문제가 있습니다.SQL Server 2008 데이터베이스 열에서 XML 문서 탐색

이 SQL 쿼리를 사용하고 있으며 FuelPathwayCode XML 노드의 첫 번째 값 인스턴스 만 선택합니다. 전체 XML 문서를 탐색하고 하나의 결과 집합에서/FuelPathwayCode XML 노드의 모든 값을 쿼리하려고합니다.

SELECT 
    UploadFileID, Year, Quarter, 
    FileContent.value('(LCFS-Report/Fuel/FuelPathwayCode)[1]', 'varchar(100)') as FuelPathwayCode 
FROM LC_UploadXM 

나는이 같은 결과 세트를 찾고 있어요 :

UploadFileID Year Quarter FuelPathWayCode PhysicalPathwayCode 
8    2010 4  CARBOB001   PP001 
8    2010 4  CARBOB002-HIGH PP001 

테이블 열 :

UploadFileID, 
Year, 
Quarter, 
CompanyID, 
FileType, 
FileContent, 
FileName, 
Description, 
Success, 
AddBy, 
AddDttm 
+0

편집기 도구 모음에서 "코드"버튼 (010 101)을 사용하여 섹션을 강조 표시하고 코드 섹션으로 형식을 지정하십시오. SQL 문과 같이 고정해야하는 항목 (테이블 값과 같은)은 서식 설정에서 크게 유익합니다. 정확히! –

답변

1

당신은 CROSS 적용을 당신이 필요로하는 XML의 비트를 선택해야 할, 그리고 당신은이에 .value의 일련의 호출 할 필요가 : 기본적으로

SELECT 
    UploadFileID, Year, Quarter, 
    FC.Node.value('(FuelPathwayCode)[1]', 'varchar(100)') as FuelPathwayCode 
FROM 
    LC_UploadXM 
CROSS APPLY 
    FileContent.nodes('/LCFS-Report/Fuel') as FC(Node) 

이를 해당 XPath /LCFS-Report/Fuel에있는 모든 XML 노드를 가져 와서 테이블의 행인 것처럼 사용합니다 (스키마는 FC이고 "가상 테이블"이름은 "노드"입니다 - 원하는대로 사용할 수 있습니다. 너)를 선택하고 크로스를 적용하여 기본 셀렉트에 적용합니다.

"가상 테이블"FC.Node가 개별 값 (예 : XML의 "포인터"가 이미 XML의 "연료"하위 노드에 있으며 이제 .value() 호출을 사용하여 XML 내부의 개별 값에 액세스 할 수 있습니다.

Alex Homer의 SQL Server 2005 XQuery 소개 자료 - 우수한 자료를 확인하십시오!

관련 문제