Udostępnij za pośrednictwem


EXIST() metoda (xml typ danych)

Zwraca bit , reprezentuje jeden z następujących warunków:

  • 1 reprezentujących True, jeśli XQuery wyrażenie w kwerendzie zwraca wynik niepusty.Oznacza to, że zwraca ona co najmniej jeden węzeł XML.

  • 0, reprezentujących False, jeśli zwraca wynik puste.

  • Jeśli NULL xml typu danych wystąpienie przeciwko której wykonano kwerendę zawiera wartość NULL.

Ostrzeżenie

Exist()metoda zwraca 1 XQuerywyrażenie , które zwraca wynik niepusty. Jeśli określisz true() lub false() działa wewnątrz exist() metoda exist() metoda zwraca 1, ponieważ funkcje true() i false() zwracają wartość wartość logiczna PRAWDA i FAŁSZ, odpowiednio.Oznacza to, że zwracały niepusty wynik).W związku z tym exist() zwróci 1 (PRAWDA), jak pokazano w następującym przykładzie:

declare @x xml
set @x=''
select @x.exist('true()') 

Składnia

exist (XQuery) 

Argumenty

  • XQuery
    Jest XQueryjakowyrażenie ciąg literału.

Przykłady

Następujące przykłady przedstawiają sposób określania exist() metoda.

Przykład: Określanie exist() metoda wobec zmiennej typu xml

W poniższym przykładzie @ x jest xml typ zmiennej (bez typu xml) i @ f jest zmienną typu Liczba całkowita, która przechowuje wartość zwracana przez exist() metoda.Exist() metoda zwraca wartość True (1), jeżeli jest przechowywany w XML wystąpienie wartości data 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

Przy porównywaniu daty w exist() metodapod uwagę następujące informacje:

  • Kod cast as xs:date? jest używana do oddania wartości do xs:data typu do celów porównania.

  • Wartość @ somedate atrybut jest bez typu.Przy porównywaniu wartości, to jest niejawnie rzutować typ porównania, po prawej stronie xs:data typu.

  • Zamiast oddane jako xs: (data), można użyć xs: (data) funkcjakonstruktora.Aby uzyskać więcej informacji, zobacz Funkcji konstruktora (XQuery).

Poniższy przykład jest podobny do poprzedniego, z wyjątkiem posiada <Somedate> element.

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

Poniższe z poprzedniej kwerendy:

  • Text() metoda zwraca węzła tekstu, który zawiera wartość bez 2002-01-01. (Typ XQuery jest xdt:untypedAtomic.) Należy jawnie oddanych tę wartość z x do xsd:data, ponieważ niejawna Rzutowanie nie jest obsługiwany w tym przypadek.

Przykład: Określanie exist() metoda wobec zmiennej maszynowy xml

Poniższy przykład ilustruje użycie exist() metoda przeciwko xml typu zmiennej.Jest zmienną określonego XML, ponieważ określa nazwę kolekcja schematu obszaru nazw ManuInstructionsSchemaCollection.

W przykładzie instrukcje wytwarzania dokument jest najpierw przypisany do tej zmiennej a exist() metoda jest używana do znajdowania, czy dokument zawiera <Location> element którego LocationIDwartośćatrybut jest 50.

Exist() określićmetoda przeciwko if (True) zwraca wartość zmiennej 1 @ x dokument zawiera instrukcje produkcji <Location> elementu, który ma LocationID=50. W przeciwnym przypadku metoda zwraca 0 (FAŁSZ).

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

Przykład: Określanie exist() metoda przeciwko typ xml kolumna

Następująca kwerenda pobiera modelu produktu identyfikatory, których opisy wykazu nie obejmują specyfikacji, <Specifications> element:

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

Poniższe z poprzedniej kwerendy:

  • klauzula WHERE wybiera tylko wiersze z ProductDescription tabela , które spełniają warunek określony przeciwko CatalogDescription xml wpisz kolumna.

  • Exist() metoda w klauzula WHERE zwraca wartość 1 (PRAWDA), jeśli kod XML nie zawiera żadnych <Specifications> element. Zwróć uwagę na zastosowanie not() funkcja (XQuery).

  • Sql: ()kolumna funkcja (XQuery)funkcja jest używana do wartości z kolumna-XML.

  • Ta kwerenda zwraca pusty zestaw wierszy.

Określa kwerendę query() i exist() metod typu danych xml i obie te metody zadeklarować tej samej przestrzeni nazw w prologu kwerendy.W tym przypadeknależy zadeklarować prefiks i używać go w kwerendzie za pomocą Z 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