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