Aracılığıyla paylaş


EXIST() Yöntem (xml veri türü)

Verir bir bit , aşağıdakilerden birini gösterir:

  • Sorguda XQuery ifade boş olmayan bir sonuç döndürürse, true temsil eden 1.Diğer bir deyişle, en az bir XML düğümü döndürür.

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

  • NULL ise XML veri türü örnek, karşı sorgu çalıştırıldı NULL içerir.

Not

The exist() yöntem returns 1 for the XQuery ifade that returns a nonempty result.Belirttiğiniz TRUE() or False() içinde işlevleriEXIST() yöntemiEXIST() yöntem 1 döndürür, çünkü işlevleri TRUE() and False() dönmek Boole doğru ve yanlış, sırasıyla.Başka bir deyişle, bunlar boş olmayan bir sonuç döndürür).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()') 
exist (XQuery) 

Bağımsız değişkenler

  • XQuery
    Ifade, bir dize XQuery belirtilir.

Örnekler

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

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

Aşağıdaki örnekte, @ x olduğu bir XML türü değişkeni (türlenmemiş xml) ve @ f olan bir tamsayı türü değişkeni tarafından döndürülen değeri saklayanEXIST() yöntem.The exist() yöntem returns True (1) if the tarih value stored in the XML örnek is 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

Tarihleri karşılaştırmak, EXIST() yöntem, aşağıdakilere dikkat edin:

  • Kodu cast as xs:date? değere atama için kullanılır xs:tarih türü amacıyla karşılaştırma.

  • Değeri @ Somedate türlenmemiş öznitelik.Bu değer karşılaştırma, onu örtülü olarak türü, karşılaştırma için sağdaki artığını xs:tarih türü.

  • Yerine xs:tarih() atama kullanabilirsiniz.xs:tarih() kurucu işlev.Daha fazla bilgi için bkz:Oluşturucu işlevler (XQuery).

Taşıdığından dışında aşağıdaki örnek önceki bir belgeye, benzer bir <Somedate> Öğe.

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:

  • The text() yöntem returns a text node that contains the untyped value 2002-01-01. (XQuery türdür XDT:untypedAtomic.) Yazılan bu değeri açıkça dönüştürmelisinizx to xsd:tarih, örtülü çevrim bu desteklenmediğinden durum.

Örnek: Klavyeyle yazılan bir xml değişken karşı exist() yöntem belirtme

Aşağıdaki örnek kullanımını gösterir EXIST() karşı bir yöntem XML türü değişkeni.Bu şema ad alanı koleksiyon adı belirtir çünkü yazılan bir XML değişken değildir. ManuInstructionsSchemaCollection.

Örnekte, bir üretim yönergeleri belgeyi, ilk olarak bu değişkenine atanır ve EXIST() yöntem, belgeyi bir <Location> öğe içerip içermediğini, bulmak için kullanılırLocationID öznitelik değeri 50'dir.

The exist() yöntem specified against the @x variable returns 1 (True) if the manufacturing instructions document includes a <Location> element that has 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ütun karşı exist() yöntem belirtme

Aşağıdaki sorgu, ürün modeli kimliği, katalog açıklamaları, özellikleri dahil alır. <Specifications> Öğe:

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 tablo, karşı belirtilen koşulu karşılayanCatalogDescription xml türü sütun.

  • The exist() yöntem in the WHERE yan tümce returns 1 (True) if the XML does not include any <Specifications> element.Kullanımına dikkat edin Not() işlev (XQuery).

  • The sql:sütun() işlev (XQuery) işlev is used to bring in the value from a non-XML sütun.

  • Bu sorgu, boş satır kümesi kümesi döndürür.

Sorguyu belirtir. Query() and EXIST() yöntemleri xml veri türü ve her iki yöntem, aynı ad alanları, sorgu giriş bildirin.Bu durumda, önek bildirmek ve sorguda kullanmak için WITH XMLNAMESPACES 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