sql:variable() 함수(XQuery)
XML 데이터 항목 내의 SQL 관계형 값을 포함하는 변수를 제공합니다.
구문
sql:variable("variableName") as xdt:anyAtomicType?
주의
XML 데이터 내 관계형 데이터 바인딩 항목에 설명된 것과 같이 XML 데이터 형식 메서드를 사용할 때 이 함수를 사용하여 XML 내에 관계형 값을 제공할 수 있습니다.
예를 들어 query() 메서드를 사용하여 xml 데이터 형식 변수 또는 열에 저장된 XML 인스턴스에 대해 쿼리를 지정합니다. 일부 경우에는 쿼리에서 Transact-SQL 변수 또는 매개 변수로부터 값을 사용하거나 관계형 및 XML 데이터를 함께 사용할 수 있습니다. 이렇게 하려면 sql:variable 함수를 사용합니다.
SQL 값은 해당 XQuery 값으로 매핑되고 이 값의 유형은 해당 SQL 유형과 같은 XQuery 기본 유형이 됩니다.
SQL Server 2005에서는 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" />
참고 항목
참조
개념
형식화된 XML과 형식화되지 않은 XML
xml 데이터 형식
XML 인스턴스 생성
XML DML(XML 데이터 수정 언어)