XML 데이터 내 관계형 데이터 바인딩
적용 대상: SQL ServerAzure SQL Database Azure SQL Managed Instance
xml 데이터 형식 변수 또는 열에 대해 xml 데이터 형식 메서드를 지정할 수 있습니다. 예를 들어 query() 메서드(xml Data Type)는 XML 인스턴스에 대해 지정된 XQuery를 실행합니다. 이러한 방식으로 XML을 생성할 때 비 XML 형식 열 또는 Transact-SQL 변수의 값을 가져올 수 있습니다. 이 프로세스를 XML 내의 관계형 데이터 바인딩이라고 합니다.
XML 내에 비 XML 관계형 데이터를 바인딩하기 위해 SQL Server 데이터베이스 엔진 다음과 같은 의사 함수를 제공합니다.
sql:column() 함수(XQuery)를 사용하면 XQuery 또는 XML DML 식의 관계형 열에 있는 값을 사용할 수 있습니다.
sql:variable() 함수(XQuery) XQuery 또는 XML DML 식에 있는 SQL 변수 값을 사용할 수 있습니다.
XML 내에서 관계형 값을 노출하려는 경우 xml 데이터 형식 메서드와 함께 이러한 함수를 사용할 수 있습니다.
이러한 함수를 사용하여 xml, CLR 사용자 정의 형식, datetime, smalldatetime, text, ntext, sql_variant 및 이미지 형식의 열 또는 변수에서 데이터를 참조할 수 없습니다.
또한 이 바인딩은 읽기 전용입니다. 즉, 이러한 함수를 사용하는 열에는 데이터를 쓸 수 없습니다. 예를 들어 sql:variable("@x")="some expression"은 허용되지 않습니다.
예: sql:variable()을 사용한 도메인 간 쿼리
이 예에서는 애플리케이션에서 sql:variable()을 사용하여 쿼리를 매개 변수화하는 방법을 보여 줍니다. ISBN은 SQL 변수 @isbn를 사용하여 전달됩니다. 상수 는 sql:variable()로 바꿔서 ISBN이 0-7356-1588-2인 ISBN뿐만 아니라 모든 ISBN을 검색하는 데 사용할 수 있습니다.
DECLARE @isbn VARCHAR(20)
SET @isbn = '0-7356-1588-2'
SELECT xCol
FROM T
WHERE xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1
sql:column()을 비슷한 방식으로 사용하면 추가 이점이 있습니다. 비용 기반 쿼리 최적화 프로그램에서 결정한 대로 열에 대한 인덱스를 효율성에 사용할 수 있습니다. 또한 계산 열은 승격된 속성을 저장할 수 있습니다.