exist() 메서드(xml 데이터 형식)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

다음 조건 중 하나를 나타내는 비트를 반환합니다.

  • 쿼리의 XQuery 식이 무표정 결과를 반환하는 경우 True를 나타내는 1입니다. 즉, 하나 이상의 XML 노드를 반환합니다.

  • 빈 결과를 반환하는 경우 False를 나타내는 0입니다.

  • 쿼리가 실행된 xml 데이터 형식 인스턴스에 NULL이 포함된 경우 NULL입니다.

Syntax

exist (XQuery)   

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

XQuery
XQuery 식이며 문자열 리터럴입니다.

설명

참고 항목

exist() 메서드는 흠 없는 결과를 반환하는 XQuery 식에 대해 1을 반환합니다. exist() 메서드 내에서 true() 또는 false() 함수를 지정하면 exist() 메서드는 각각 true() 및 false() 함수가 부울 True와 False를 반환하기 때문에 1을 반환합니다. 즉, 아무 것도 없는 결과를 반환합니다). 따라서 exist() 는 다음 예제와 같이 1(True)을 반환합니다.

DECLARE @x XML;  
SET @x='';  
SELECT @x.exist('true()');   

예제

다음 예에서는 exist() 메서드를 지정하는 방법을 보여 줍니다.

예: xml 형식 변수에 대해 exist() 메서드 지정

다음 예제 @x에서는 xml 형식 변수(형식화되지 않은 xml)이며 @f exist() 메서드에서 반환된 값을 저장하는 정수 형식 변수입니다. XML 인스턴스에 저장된 날짜 값이면 exist() 메서드는 True(1)를 반환합니다2002-01-01.

DECLARE @x XML;  
DECLARE @f BIT;  
SET @x = '<root Somedate = "2002-01-01Z"/>';  
SET @f = @x.exist('/root[(@Somedate cast as xs:date?) eq xs:date("2002-01-01Z")]');  
SELECT @f;  

exist() 메서드의 날짜를 비교할 때 다음 사항에 유의하세요.

  • 이 코드 cast as xs:date? 는 비교를 위해 값을 xs:date 형식으로 캐스팅하는 데 사용됩니다.

  • @Somedate 특성의 값은 형식화되지 않습니다. 이 값을 비교할 때 암시적으로 비교의 오른쪽에 있는 형식인 xs:date 형식으로 캐스팅됩니다.

  • xs:date()로 캐스팅하는 대신 xs:date() 생성자 함수를 사용할 수 있습니다. 자세한 내용은 생성자 함수(XQuery)를 참조하세요.

다음 예제는 <Somedate> 요소가 있다는 점을 제외하고 앞의 예와 비슷합니다.

DECLARE @x XML;  
DECLARE @f BIT;  
SET @x = '<Somedate>2002-01-01Z</Somedate>';  
SET @f = @x.exist('/Somedate[(text()[1] cast as xs:date ?) = xs:date("2002-01-01Z") ]')  
SELECT @f;  

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

  • text() 메서드는 형식화되지 않은 값을 2002-01-01포함하는 텍스트 노드를 반환합니다. (XQuery 형식은 xdt:untypedAtomic입니다.) 이 경우 암시적 캐스팅이 지원되지 않으므로 이 형식화된 값을 x에서 xsd:date로 명시적으로 캐스팅해야 합니다.

예: 형식화된 xml 변수에 대해 exist() 메서드 지정

다음 예제에서는 xml 형식 변수에 대해 exist() 메서드를 사용하는 방법을 보여 줍니다. 이 메서드는 스키마 네임스페이스 컬렉션 이름인 ManuInstructionsSchemaCollection을 지정하므로 형식화된 XML 변수입니다.

다음 예에서는 제조 지침 문서를 이 변수에 할당한 다음, exist() 메서드를 사용하여 LocationID 특성 값이 50인 <Location> 요소가 문서에 있는지 확인합니다.

제조 지침 문서에 LocationID=50를 가진 <Location> 요소가 포함되면 @x 변수에 대해 지정된 exist() 메서드가 1(True)을 반환합니다. 그렇지 않으면 메서드는 0(False)을 반환합니다.

DECLARE @x XML (Production.ManuInstructionsSchemaCollection);  
SELECT @x=Instructions  
FROM Production.ProductModel  
WHERE ProductModelID=67;  
--SELECT @x  
DECLARE @f INT;  
SET @f = @x.exist(' declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
    /AWMI:root/AWMI:Location[@LocationID=50]  
');  
SELECT @f;  

예: xml 형식 열에 대해 exist() 메서드 지정

다음 쿼리에서는 카탈로그 설명에 사양 <Specifications> 요소가 없는 제품 모델 ID를 검색합니다.

SELECT ProductModelID, CatalogDescription.query('  
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
    <Product   
        ProductModelID= "{ sql:column("ProductModelID") }"   
        />  
') AS Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('  
    declare namespace  pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     /pd:ProductDescription[not(pd:Specifications)]'  
    ) = 1;  

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

  • WHERE 절은 CatalogDescription xml 형식 열에 대해 지정된 조건을 충족하는 ProductDescription 테이블에서 해당 행만 선택합니다.

  • XML에 <Specifications> 요소가 없으면 WHERE 절의 exist() 메서드가 1(True)을 반환합니다. not() 함수(XQuery)사용합니다.

  • sql:column() 함수(XQuery) 함수는 비 XML 열에서 값을 가져오는 데 사용됩니다.

  • 이 쿼리는 빈 행 집합을 반환합니다.

쿼리는 xml 데이터 형식의 query()exist() 메서드를 지정하고 두 메서드는 모두 쿼리 프롤로그에서 동일한 네임스페이스를 선언합니다. 이 경우 WITH XMLNAMESPACES를 사용하여 접두사를 선언하고 이 접두사를 쿼리에 사용할 수 있습니다.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)  
SELECT ProductModelID, CatalogDescription.query('  
    <Product   
        ProductModelID= "{ sql:column("ProductModelID") }"   
        />  
') AS Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('  
     /pd:ProductDescription[not(pd:Specifications)]'  
    ) = 1;  

참고 항목

WITH XMLNAMESPACES를 사용하여 쿼리에 네임스페이스 추가
형식화된 XML과 형식화되지 않은 XML 비교
XML 데이터의 인스턴스 만들기
xml 데이터 형식 메서드
XML DML(XML 데이터 수정 언어)