다음을 통해 공유


원자화(XQuery)

적용 대상:SQL Server

원자화는 항목의 형식화된 값을 추출하는 프로세스입니다. 이 프로세스는 특정 상황에서 암시됩니다. 산술 연산자 및 비교 연산자와 같은 일부 XQuery 연산자는 이 프로세스에 따라 달라집니다. 예를 들어 산술 연산자를 노드에 직접 적용하면 데이터 함수를 암시적으로 호출하여 노드의 형식화된 값을 먼저 검색합니다. 원자성 값을 산술 연산자에 피연산자로 전달합니다.

예를 들어 다음 쿼리는 LaborHours 특성의 합계를 반환합니다. 이 경우 data() 는 특성 노드에 암시적으로 적용됩니다.

declare @x xml  
set @x='<ROOT><Location LID="1" SetupTime="1.1" LaborHours="3.3" />  
<Location LID="2" SetupTime="1.0" LaborHours="5" />  
<Location LID="3" SetupTime="2.1" LaborHours="4" />  
</ROOT>'  
-- data() implicitly applied to the attribute node sequence.  
SELECT @x.query('sum(/ROOT/Location/@LaborHours)')  

필수는 아니지만 data() 함수를 명시적으로 지정할 수도 있습니다.

SELECT @x.query('sum(data(ROOT/Location/@LaborHours))')  

암시적 원자화의 또 다른 예는 산술 연산자를 사용하는 경우입니다. + 연산자는 원자성 값이 필요하며 data()는 LaborHours 특성의 원자성 값을 검색하기 위해 암시적으로 적용됩니다. 쿼리는 ProductModel 테이블의 xml 형식에 대한 Instructions 열에 대해 지정됩니다. 다음 쿼리는 LaborHours 특성을 3번 반환합니다. 쿼리에서 다음 사항에 유의하세요.

  • OrignialLaborHours 특성을 생성할 때 원자화는 ($WC/@LaborHours)에 의해 반환된 싱글톤 시퀀스에 암시적으로 적용됩니다. LaborHours 특성의 형식화된 값은 OrignialLaborHours에 할당됩니다.

  • UpdatedLaborHoursV1 특성을 생성할 때 산술 연산자에는 원자성 값이 필요합니다. 따라서 data()는 ($WC/@LaborHours)에 의해 반환되는 LaborHours 특성에 암시적으로 적용됩니다. 그런 다음 원자성 값 1이 추가됩니다. UpdateLaborHoursV2 특성의 생성은 데이터()명시적 애플리케이션을 보여 주지만 필수는 아닙니다.

SELECT Instructions.query('  
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
for $WC in /AWMI:root/AWMI:Location[1]  
        return  
            <WC OriginalLaborHours = "{ $WC/@LaborHours }"  
                UpdatedLaborHoursV1 = "{ $WC/@LaborHours + 1 }"   
                UpdatedLaborHoursV2 = "{ data($WC/@LaborHours) + 1 }" >  
            </WC>') as Result  
FROM Production.ProductModel  
where ProductModelID=7  

결과는 다음과 같습니다.

<WC OriginalLaborHours="2.5"   
    UpdatedLaborHoursV1="3.5"   
    UpdatedLaborHoursV2="3.5" />  

원자화로 인해 단순 형식의 인스턴스, 빈 집합 또는 정적 형식 오류가 발생합니다.

또한 함수에 전달된 비교 식 매개 변수, 함수에 의해 반환된 값, cast() 식 및 order by 절에 전달된 순서 식에서도 원자화가 발생합니다.

참고 항목

XQuery 기본 사항
비교 식(XQuery)
xml 데이터 형식에 대한 XQuery 함수