sql:variable() 함수(XQuery)
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 삽입 문의 원본 식 컨텍스트에 있는 xml 인스턴스만 참조할 수 있으며 그외의 경우에는 xml 유형 또는 CLR(공용 언어 런타임) 사용자 정의 형식의 열을 참조할 수 없습니다.
예
1. sql:variable() 함수를 사용하여 Transact-SQL 변수 값을 XML로 가져오기
다음 예에서는 다음으로 구성된 XML 인스턴스를 생성합니다.
비 XML 열의 값(ProductID). XML에서 이 값을 바인딩하는 데에는 sql:column() 함수가 사용됩니다.
다른 테이블에 있는 비 XML 열의 값(ListPrice). 여기에서도 XML에서 이 값을 바인딩하는 데 sql:column()이 사용됩니다.
Transact-SQL 변수의 값(DiscountPrice). XML로 이 값을 바인딩하는 데 sql:variable() 메서드가 사용됩니다.
쿼리를 보다 효율적으로 만들기 위한 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
이전 쿼리에서 다음을 유의하십시오.
query() 메서드 내부의 XQuery는 XML을 생성합니다.
XQuery 프롤로그에서 네임스페이스 접두사를 정의하는 데 namespace 키워드가 사용됩니다. 이러한 작업은 스키마가 연결되어 있는 CatalogDescription xml 유형의 열에서 ProductModelName 특성 값이 검색되기 때문에 수행됩니다.
다음은 결과입니다.
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />