1
XML 파일에서 데이터를 추출하는 데 도움이 필요합니다. 일반적으로 아무런 문제가 없지만이 파일의 구조는 혼란 스럽습니다. . 아래 샘플 XML. 내가 검색 한 기사 없음 내가TSQL 요소 특성을 기반으로 XML 파일 읽기
법인 EntityType 이름
1 내부 Customer123 업데이트됩니다 싶어 내가
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Entities TotalResults="3">
<Entity Type="testing"><Fields>
<Field Name="type"><Value>Internal</Value></Field>
<Field Name="name"><Value>Customer123</Value></Field>
<Field Name="updated"><Value>Yes</Value></Field>
</Fields></Entity>
<Entity Type="testing"><Fields>
<Field Name="type"><Value>External</Value></Field>
<Field Name="name"><Value>CustomerABC</Value></Field>
<Field Name="updated"><Value>Yes</Value></Field>
</Fields></Entity>
<Entity Type="testing"><Fields>
<Field Name="type"><Value>Unknown</Value></Field>
<Field Name="name"><Value>Customer456</Value></Field>
<Field Name="updated"><Value>No</Value></Field>
</Fields></Entity>
</Entities>
을 필요로하는 방식으로이 XML 파일과 함께 작동하는 것 같다 해결책을 가지고 있습니다 예
이 외부 CustomerABC 예
3 알 수없는 Customer456 없음
01 23,516,내가
DECLARE @input XML
SELECT @input = CAST(x AS XML)FROM OPENROWSET(BULK 'C:\Test.xml', SINGLE_BLOB) AS T(x)
SELECT T1.steps.value('Value[1]', 'nvarchar(Max)') As EntityType
FROM @input.nodes('Entities/Entity/Fields/Field') AS Tbl(Scan)
CROSS APPLY Tbl.Scan.nodes('.') as T1(steps)
Where Tbl.Scan.value('(@Name)[1]', 'varchar(max)') = 'type'
SELECT
T1.steps.value('Value[1]', 'nvarchar(Max)') As Name
FROM @input.nodes('Entities/Entity/Fields/Field') AS Tbl(Scan)
CROSS APPLY Tbl.Scan.nodes('.') as T1(steps)
Where Tbl.Scan.value('(@Name)[1]', 'varchar(max)') = 'name'
SELECT
T1.steps.value('Value[1]', 'nvarchar(Max)') As Updated
FROM @input.nodes('Entities/Entity/Fields/Field') AS Tbl(Scan)
CROSS APPLY Tbl.Scan.nodes('.') as T1(steps)
Where Tbl.Scan.value('(@Name)[1]', 'varchar(max)') = 'updated'
나에게 3 개 행 각각 세 개의 테이블을 준다 .. 데이터 내가 원하는 형식으로 파일이 아닌 얻을 수있는, 내가 같은 데이터를 반환하는 쿼리를 실행할 수 있습니다 필요한 것?