다음을 통해 공유


모듈 및 프롤로그 - XQuery 프롤로그

적용 대상:SQL Server

XQuery 쿼리는 프롤로그와 본문으로 구성됩니다. XQuery 프롤로그는 쿼리 처리에 필요한 환경을 만드는 일련의 선언 및 정의로 구성됩니다. SQL Server에서 XQuery 프롤로그에는 네임스페이스 선언이 포함될 수 있습니다. XQuery 본문은 의도한 쿼리 결과를 지정하는 식 시퀀스로 구성됩니다.

예를 들어 다음 XQuery는 제조 지침을 XML로 저장하는 xml 유형의 지침 열에 대해 지정됩니다. 쿼리는 작업 센터 위치에 10대한 제조 지침을 검색합니다. query() xml 데이터 형식의 메서드는 XQuery를 지정하는 데 사용됩니다.

SELECT Instructions.query('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";           
    /AWMI:root/AWMI:Location[@LocationID=10]  
') AS Result   
FROM  Production.ProductModel  
WHERE ProductModelID=7  

이전 쿼리의 다음 사항에 유의하세요.

  • XQuery 프롤로그에는 AWMI(네임스페이스 접두사) 선언이 (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";포함됩니다.

  • 키워드는 declare namespace 쿼리 본문의 뒷부분에서 사용되는 네임스페이스 접두사를 정의합니다.

  • /AWMI:root/AWMI:Location[@LocationID="10"] 는 쿼리 본문입니다.

네임스페이스 선언

네임스페이스 선언은 다음 쿼리와 같이 접두사를 정의하고 네임스페이스 URI와 연결합니다. 쿼리 CatalogDescription 에서 xml 형식 열입니다.

이 열에 대해 XQuery를 지정할 때 쿼리 프롤로그는 접두사, 제품 설명을 네임스페이스 PDURI와 연결할 선언을 지정 declare namespace 합니다. 그런 다음 이 접두사는 네임스페이스 URI 대신 쿼리 본문에서 사용됩니다. 결과 XML의 노드는 네임스페이스URI와 연결된 네임스페이스에 있습니다.

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
         /PD:ProductDescription/PD:Summary   
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

쿼리 가독성을 향상시키기 위해 쿼리 프롤로그에서 접두사 및 네임스페이스 바인딩을 선언하는 대신 WITH XMLNAMESPACES를 사용하여 네임스페이스를 선언할 수 있습니다 declare namespace.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD)  
  
SELECT CatalogDescription.query('  
         /PD:ProductDescription/PD:Summary   
    ') as Result  
FROM Production.ProductModel  
where ProductModelID=19  

자세한 내용은 WITH XMLNAMESPACES를 사용하여 쿼리에 네임스페이스 추가를 참조 하세요.

기본 네임스페이스 선언

선언을 사용하여 declare namespace 네임스페이스 접두사를 선언하는 대신 선언을 declare default element namespace 사용하여 요소 이름의 기본 네임스페이스를 바인딩할 수 있습니다. 이 경우 접두사를 지정하지 않습니다.

다음 예제에서 쿼리 본문의 경로 식은 네임스페이스 접두사를 지정하지 않습니다. 기본적으로 모든 요소 이름은 프롤로그에 지정된 기본 네임스페이스에 속합니다.

SELECT CatalogDescription.query('  
     declare default element namespace  "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
        /ProductDescription/Summary   
    ') as Result  
FROM  Production.ProductModel  
WHERE ProductModelID=19   

WITH XMLNAMESPACES를 사용하여 기본 네임스페이스를 선언할 수 있습니다.

WITH XMLNAMESPACES (DEFAULT 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription')  
SELECT CatalogDescription.query('  
        /ProductDescription/Summary   
    ') as Result  
FROM  Production.ProductModel  
WHERE ProductModelID=19   

참고 항목

WITH XMLNAMESPACES를 사용하여 쿼리에 네임스페이스 추가