Aracılığıyla paylaş


exist() yöntemi (xml veri türü)

Döndürür bir bit , aşağıdaki koşullardan birini gösterir:

  • True, sorgu XQuery ifade boş olmayan bir sonuç döndürürse temsil eden 1.Yani, en az bir xml düğümü döndürür.

  • 0, False, boş bir sonuç döndürürse temsil eden.

  • null IF xml veri türü örnek , karşı sorgu yürütülen null içerir.

Not

Exist()yöntem için boş olmayan bir sonuç döndüreceği için XQueryifade 1 döndürür. Belirtirseniz true() veya false() içinde işlev exist() yöntem, exist() yöntem , 1, döndürür, çünkü işlevleri true() ve false() Boole True ve False, sırasıyla döndürür.Yani, boş olmayan bir sonuç döndürmeleri).Bu nedenle, exist() 1 (doğru), aşağıdaki örnekte gösterildiği gibi döndürür:

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

Sözdizimi

exist (XQuery) 

Bağımsız değişkenler

  • XQuery
    XQueryifade, bir dize olur.

Örnekler

Aşağıdaki örnekler nasıl belirtileceğini exist() yöntem.

Örnek: Bir xml türü değişkeni karşı exist() yöntem belirtme

Aşağıdaki örnekte, @ x olan bir xml türü değişkeni (türlenmemiş xml) @ f ise depolar tarafından döndürülen değeri bir tamsayı türü değişkeni exist() yöntem.Exist() yöntem 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

Tarihler karşılaştırma içinde exist() yöntem, aşağıdakilere dikkat edin:

  • Kod cast as xs:date? tonunu değeri için kullanılan xs:tarih karşılaştırma amacıyla türü.

  • Değeri @ somedate öznitelik untyped.Bu değer karşılaştırma onu dolaylı olarak karşılaştırma sağ tarafındaki türü tonunu xs:tarih türü.

  • Yerine xs artığını:tarih(), kullanabileceğiniz xs:tarih() yapıcı işlev.Daha fazla bilgi için, bkz. Oluşturucu işlevler (XQuery).

Bunu dışında aşağıdaki örnek önceki, benzer bir <Somedate> öğesi.

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

Önceki sorgudan aşağıdakilere dikkat edin:

  • Text() yöntem untyped değeri içeren bir metin düğümü döndürür 2002-01-01. ( XQuery türü olan xdt:untypedAtomic.) Bu yazılı değeri açıkça dönüştürmelisiniz x için xsd:tarih, kapalı çevrim durumdesteklenmediğinden.

Örnek: Yazılı xml değişken karşı exist() yöntem belirtme

Aşağıdaki örnek kullanımını göstermektedir exist() yöntem karşı bir xml türü değişkeni.Yazılı xml değişkeni, şema ad alanı koleksiyon adı belirtir çünkü ManuInstructionsSchemaCollection.

Örnekte, belge bu değişkene atanan ilk üretim yönergeleri ve sonra exist() yöntem belge içerip içermeyeceğini bulmak için kullanılan bir <Location> öğesi, LocationID öznitelik değeri olan 50.

Exist() yöntem belirtilen @ x değişken döndürür 1 (doğru) Eğer karşı belge içeren üretim yönergeleri bir <Location> olan öğe LocationID=50. Aksi halde, yöntem 0 (yanlış) döndürür.

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

Örnek: Bir xml türü sütunkarşı exist() yöntem belirtme

Ürün modeli kimliği, katalog açıklamaları belirtimleri ekleme aşağıdaki sorgu alır <Specifications> öğesi:

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

Önceki sorgudan aşağıdakilere dikkat edin:

  • where yan tümce yalnızca alınan satırların seçer ProductDescription karşı belirtilen koşula uyması birtablo CatalogDescription xml sütunyazın.

  • Exist() yöntem xml içermez, where yan tümce verir 1 (doğru) olarak <Specifications> öğesi. Kullanımına dikkat edin not() işlev (XQuery).

  • Sql:sütun() işlev (XQuery)işlev bir xml olmayan sütundeğeri getirmek için kullanılır.

  • Bu sorgu, boş bir satır kümesidöndürür.

Sorgu belirtir query() ve exist() xml veri türü yöntemleri ve bu yöntemlerin her ikisi de aynı ad alanları sorgu önsöz bildirin.Bu durumda, xmlnamespaces ile önek bildirmek ve Sorguda kullanmak için kullanmak isteyebilirsiniz.

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