2010-04-21 2 views
0

This site는 마이크로 소프트 SQL 서버에서 주변에 XML 데이터를 전달하는 기술이 있습니다마이크로 소프트 SQL 서버 XML 데이터

DECLARE @productIds xml 
SET @productIds ='<Products><id>3</id><id>6</id><id>15</id></Products>' 

SELECT 
ParamValues.ID.value('.','VARCHAR(20)') 
FROM @productIds.nodes('/Products/id') as ParamValues(ID) 

을하지만 다른 필드를 추가하는 경우 구문은 무엇인가? 이 작동하지 않음 다음

DECLARE @productIds xml 
SET @productIds ='<Products><id>3</id><descr>Three</descr><id>6</id><descr>six</descr><id>15</id><descr>Fifteen</descr></Products>' 

SELECT 
ParamValues.ID.value('.','VARCHAR(20)') 
,ParamValues.descr.value('.','VARCHAR(20)') 
FROM @productIds.nodes('/Products/id') as ParamValues(ID) 

참고 : 어쩌면 내 XML을 잘못 구성했습니다.

답변

3

당신은 같은 것을 사용해야합니다 문 FROM ParamValues.ID라는 "가상 테이블"와 같은 뭔가가 정의

SELECT 
    ParamValues.ID.value('(id)[1]','VARCHAR(20)'), 
    ParamValues.ID.value('(descr)[1]','VARCHAR(20)') 
FROM 
    @productIds.nodes('/Products') as ParamValues(ID) 

그건

- 당신이 가상 테이블에 <Products> 노드를 선택하고 내부의 속성에 액세스 할 필요가 그것.

또한, 귀하의 XML 구조는 매우 심하게 선택 : - :

<Products> 
    <Product> 
     <id>3</id> 
     <descr>Three</descr> 
    </Product> 
    <Product> 
     <id>6</id> 
     <descr>six</descr> 
    </Product> 
    <Product> 
     <id>15</id> 
     <descr>Fifteen</descr> 
    </Product> 
</Products> 

<Products> 
    <id>3</id> 
    <descr>Three</descr> 
    <id>6</id> 
    <descr>six</descr> 
    <id>15</id> 
    <descr>Fifteen</descr> 
</Products> 

당신은 ID/DESCR의 개별 쌍을 선택할 수 없습니다 당신처럼 많은 것을 사용한다

그러면이 SQL XML 쿼리를 사용하여 모든 항목을 검색 할 수 있습니다.

SELECT 
    ParamValues.ID.value('(id)[1]','VARCHAR(20)') AS 'ID', 
    ParamValues.ID.value('(descr)[1]','VARCHAR(20)') AS 'Description' 
FROM 
    @productIds.nodes('/Products/Product') as ParamValues(ID) 

ID Descrition 
3  Three 
6  six 
15  Fifteen 
1

iddescr을 하나의 상위 노드로 만듭니다. 라고 . 이제 이와 같이 각 쌍에 액세스 할 수 있습니다.

DECLARE @productIds xml 
SET @productIds ='<Products><Row><id>3</id><descr>Three</descr></Row><Row><id>6</id><descr>six</descr></Row><Row><id>15</id><descr>Fifteen</descr></Row></Products>' 

SELECT 
ParamValues.Row.query('id').value('.','VARCHAR(20)'), 
ParamValues.Row.query('descr').value('.','VARCHAR(20)') 
FROM @productIds.nodes('/Products/Row') as ParamValues(Row) 
관련 문제