Share via


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

Döner 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ından bir xml düğümü döndürür.

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

  • null ise xml veri türü örneği karşı yürütülen sorgu null içerir.

[!NOT]

Exist() yöntemi, boş bir sonuç döndürür XQuery ifade için 1 döndürür. Belirtirseniz true() veya false() içinde işlevleri exist() yöntemi, exist() yöntemi, 1, dönecektir, çünkü işlevleri true() ve false() sırasıyla Boolean True ve False döndürür. Yani, onlar boş 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()') 

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

Sözdizimi

exist (XQuery) 

Bağımsız değişkenler

  • XQuery
    XQuery, bir dize ifadesidir.

Örnekler

Aşağıdaki örnekler nasıl exist()yöntemi.

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

Aşağıdaki örnekte, @ x, bir xml türü değişkeni (yazılmamış xml) ve @ f ise depolar tarafından döndürülen değeri bir tamsayı türü değişkeni exist() yöntemi. Exist() yöntemi döndürür True (1) xml örneği depolanan tarihi değeri ise 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

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öntemi, aşağıdakilere dikkat edin:

  • Kodu cast as xs:date?değeri için kullanılan XS karşılaştırma türünü amaçlar.

  • Değeri @ Somedate özniteliği yazılmamış. Bu değer karşılaştırma içinde örtülü olarak sağ tarafındaki için karşılaştırma türünü artık XS türü.

  • Yerine dökme olarak xs:date(), sen-ebilmek kullanma xs:date() yapıcı işlevi. Daha fazla bilgi için, bkz. Oluşturucu işlevler (XQuery).

It has dışında aşağıdaki örnek önceki bir 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

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öntemi, yazılmamış değerini içeren bir metin düğümü döndürür 2002-01-01. (XQuery türü xdt: untypedAtomic.) Açıkça yazılan bu değeri artığını gerekir x için desteklenmediğinden, örtülü tür atama bu durumda desteklenmediğinden.

Örnek: yazılı xml değişkeni karşı exist() yöntemi belirtme

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

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

Exist() yöntemi belirtilen @ x değişken döndürür 1 (doğru) ise karşı belge içeren üretim yönergeleri bir <Location> sahip öğesi LocationID=50. Aksi takdirde, 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

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: xml türü sütun karşı exist() yöntemi belirtme

Ürün modeli kimliği, katalog açıklamaları belirtimleri eklemeyin 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

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ümcesi yalnızca gelen satırları seçer ProductDescription karşı belirtilen koşulu karşılayan bir tablo CatalogDescription xml sütun türü.

  • Exist() yöntemi xml herhangi içermiyorsa, 1 (doğru) where yan tümcesini verir de <Specifications> öğesi. Kullanın not() işlevi (XQuery).

  • Sql:column() işlev (XQuery) işlevi, değeri olmayan xml sütundan getirmek için kullanılır.

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

Sorgu belirtir query() ve exist() xml veri türü yöntemleri ve her iki yöntem de aynı ad alanları sorgu giriş bildirir. 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

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

Ayrıca bkz.

Kavramlar

İle sorguları WITH xmlnamespaces NameSpaces eklemek

Yazılı xml yazılmamış xml karşılaştırın

xml veri örnekleri oluşturma

xml veri değişikliği dili (xml dml)

Diğer Kaynaklar

XML veri türü yöntemleri