Share via


XQuery 확장 함수 - sql:variable()

적용 대상:SQL Server

XQuery 식 내에 SQL 관계형 값이 포함된 변수를 노출합니다.

구문

  
sql:variable("variableName") as xdt:anyAtomicType?  

설명

XML 내 관계형 데이터 바인딩 항목에 설명된 대로 XML 데이터 형식 메서드를 사용하여 XQuery 내에서 관계형 값을 노출할 때 이 함수를 사용할 수 있습니다.

예를 들어 query() 메서드는 xml 데이터 형식 변수 또는 열에 저장된 XML 인스턴스에 대한 쿼리를 지정하는 데 사용됩니다. 경우에 따라 쿼리에서 Transact-SQL 변수 또는 매개 변수의 값을 사용하여 관계형 및 XML 데이터를 함께 가져오도록 할 수도 있습니다. 이렇게 하려면 sql:variable 함수를 사용합니다.

SQL 값은 해당 XQuery 값에 매핑되고 해당 형식은 해당 SQL 형식과 동일한 XQuery 기본 형식이 됩니다.

XML-DML insert 문의 원본 식 컨텍스트에서만 xml 인스턴스를 참조할 수 있습니다. 그렇지 않으면 xml 형식 또는 CLR(공용 언어 런타임) 사용자 정의 형식의 값을 참조할 수 없습니다.

A. sql:variable() 함수를 사용하여 Transact-SQL 변수 값을 XML로 가져오기

다음 예제에서는 다음으로 구성된 XML 인스턴스를 생성합니다.

  • XML이 아닌 열의 값(ProductID)입니다. sql:column() 함수는 XML에서 이 값을 바인딩하는 데 사용됩니다.

  • 다른 테이블의 비 XML 열에 있는 값(ListPrice)입니다. sql:column() 다시 XML에서 이 값을 바인딩하는 데 사용됩니다.

  • Transact-SQL 변수의 값(DiscountPrice)입니다. 이 sql:variable() 메서드는 이 값을 XML에 바인딩하는 데 사용됩니다.

  • 쿼리를 더 흥미롭게 만들기 위해 xml 형식 열의 값(ProductModelName)입니다.

다음은 쿼리입니다.

DECLARE @price money  
  
SET @price=2500.00  
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('  
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
  
       <Product   
           ProductID="{ sql:column("Production.Product.ProductID") }"  
           ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"  
           ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"  
           ListPrice="{ sql:column("Production.Product.ListPrice") }"  
           DiscountPrice="{ sql:variable("@price") }"  
        />')   
FROM Production.Product   
JOIN Production.ProductModel  
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID  
WHERE ProductID=771  

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

  • 메서드 내의 XQuery는 query() XML을 생성합니다.

  • namespace 워드는 XQuery 프롤로그에서 네임스페이스 접두사를 정의하는 데 사용됩니다. 이 작업은 특성 값이 ProductModelName 연결된 스키마가 CatalogDescription xml 있는 형식 열에서 검색되기 때문에 수행됩니다.

결과는 다음과 같습니다.

<Product ProductID="771" ProductModelID="19"   
         ProductModelName="Mountain 100"   
         ListPrice="3399.99" DiscountPrice="2500" />  

참고 항목

SQL Server XQuery 확장 함수
형식화된 XML과 형식화되지 않은 XML 비교
XML 데이터(SQL Server)
XML 데이터의 인스턴스 만들기
xml 데이터 형식 메서드
XML DML(XML 데이터 수정 언어)