기본 식(XQuery)

적용 대상:SQL Server

XQuery 기본 식에는 리터럴, 변수 참조, 컨텍스트 항목 식, 생성자 및 함수 호출이 포함됩니다.

리터럴

XQuery 리터럴은 숫자 또는 문자열 리터럴일 수 있습니다. 문자열 리터럴은 미리 정의된 엔터티 참조를 포함할 수 있으며 엔터티 참조는 문자 시퀀스입니다. 시퀀스는 구문적 의미가 있을 수 있는 단일 문자를 나타내는 앰퍼샌드로 시작합니다. 다음은 XQuery에 대한 미리 정의된 엔터티 참조입니다.

엔터티 참조 다음을 나타냅니다
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

문자열 리터럴에는 10진수 또는 16진수 코드 포인트로 식별되는 유니코드 문자에 대한 XML 스타일 참조인 문자 참조가 포함될 수도 있습니다. 예를 들어 Euro 기호는 문자 참조 "&#8364;"로 나타낼 수 있습니다.

참고 항목

SQL Server는 구문 분석의 기준으로 XML 버전 1.0을 사용합니다.

다음 예에서는 리터럴과 엔터티 및 문자 참조의 사용법을 보여 줍니다.

<''> 문자에 특별한 의미가 있기 때문에 이 코드는 오류를 반환합니다.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')  
GO  

대신 엔터티 참조를 사용하더라도 쿼리는 작동합니다.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary &gt; 50000 and &lt; 100000</SalaryRange>')  
GO  

다음 예에서는 문자 참조를 사용하여 유로 기호를 나타내는 방법을 보여 줍니다.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <a>€12.50</a>')  

이것이 결과입니다.

<a>€12.50</a>

다음 예에서 쿼리는 아포스트로피로 구분됩니다. 따라서 문자열 값의 아포스트로피는 인접한 두 아포스트로피로 표현됩니다.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>I don''t know</a>')  
Go  

이것이 결과입니다.

<a>I don't know</a>

다음 예제와 같이 기본 제공 부울 함수인 true()false()를 사용하여 부울 값을 나타낼 수 있습니다.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>{true()}</a>')  
GO  

직접 요소 생성자는 중괄호 안에서 식을 지정합니다. 그러면 결과 XML에서 해당 값으로 대체됩니다.

이것이 결과입니다.

<a>true</a>

변수 참조

XQuery의 변수 참조는 $ 부호 다음에 오는 QName입니다. 이러한 구현을 통해 접두사가 없는 변수 참조만 지원됩니다. 예를 들어 다음 쿼리는 FLWOR 식에서 변수 $i 를 정의합니다.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
 for $i in /root return data($i)')  
GO  

다음 쿼리는 네임스페이스 접두사를 변수 이름에 추가하므로 작동하지 않습니다.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
DECLARE namespace x="https://X";  
for $x:i in /root return data($x:i)')  
GO  

다음 쿼리와 같이 sql:variable() 확장 함수를 사용하여 SQL 변수를 참조할 수 있습니다.

DECLARE @price money  
SET @price=2500  
DECLARE @x xml  
SET @x = ''  
SELECT @x.query('<value>{sql:variable("@price") }</value>')  

이것이 결과입니다.

<value>2500</value>

구현 제한 사항

구현 제한 사항은 다음과 같습니다.

  • 네임스페이스 접두사를 사용하는 변수는 지원되지 않습니다.

  • 모듈 가져오기는 지원되지 않습니다.

  • 외부 변수 선언은 지원되지 않습니다. 이에 대한 해결 방법은 sql:variable() 함수를 사용하는 것입니다.

컨텍스트 항목 식

컨텍스트 항목은 현재 경로 식의 컨텍스트에서 처리 중인 항목입니다. 문서 노드가 있는 NULL이 아닌 XML 데이터 형식 인스턴스에서 초기화됩니다. XPath 식 또는 [] 조건자의 컨텍스트에서 nodes() 메서드를 통해 변경할 수도 있습니다.

컨텍스트 항목은 점(.)을 포함하는 식에서 반환됩니다. 예를 들어 다음 쿼리는 특성의 존재에 대해 각 요소를 <a> 평가합니다.attr 특성이 있으면 요소가 반환됩니다. 조건자의 조건은 컨텍스트 노드가 단일 기간으로 지정되도록 지정합니다.

DECLARE @var XML  
SET @var = '<ROOT>  
<a>1</a>  
<a attr="1">2</a>  
</ROOT>'  
SELECT @var.query('/ROOT[1]/a[./@attr]')  

이것이 결과입니다.

<a attr="1">2</a>

함수 호출

기본 제공 XQuery 함수와 SQL Server sql:variable() 및 sql:column() 함수를 호출할 수 있습니다. 구현된 함수 목록은 xml 데이터 형식에 대한 XQuery 함수를 참조 하세요.

구현 제한 사항

구현 제한 사항은 다음과 같습니다.

  • XQuery 프롤로그의 함수 선언은 지원되지 않습니다.

  • 함수 가져오기는 지원되지 않습니다.

참고 항목

XML 생성(XQuery)