Aracılığıyla paylaş


concat işlevi (XQuery)

Sıfır veya daha fazla dize bağımsız olarak kabul eder ve her bu bağımsız değişkenlerinin değerleri içinde tarafından oluşturulan bir dize döndürür.

Sözdizimi

fn:concat ($string as xs:string?
           ,$string as xs:string?
           [, ...]) as xs:string

Bağımsız değişkenler

  • $string
    Art arda bağlamak için isteğe bağlı dize.

Açıklamalar

İşlevi, en az iki bağımsız değişken gerektirir. Bağımsız değişken boş sırası ise, sıfır uzunluklu dize olarak kabul edilir.

İkincil Karakterler (Yedek Çiftler)

Veritabanı uyumluluk düzeyi ve bazı durumlarda, varsayılan ad alanı URI işlevleri için vekil çiftleri XQuery işlevleri davranışını bağlıdır. Daha fazla bilgi için bkz: "XQuery işlevleri olan vekil tanımayan" bölümü konudaki En son değişiklikleri SQL Server 2012 veritabanı altyapısı özellikleri. Also see alter database uyumluluk düzeyi (Transact-sql) and Supplementary Characters.

Örnekler

Bu konu çeşitli depolanan xml örnekleri karşı XQuery örnekler sağlar xml AdventureWorks örnek veritabanındaki sütunları yazın. Bu sütunları genel bakış için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.

A.Dizeleri bitiştirmek için concat() XQuery işlevini kullanma

Belirli bir ürün modeli için bu sorgu garanti süresi ve garanti açıklama içinde birleştirerek oluşturulan bir dize döndürür. Katalog açıklama belgede, <Warranty> eleman oluşur <WarrantyPeriod> ve <Description> alt öğeleri.

WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
    <Product 
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
        ProductModelName = "{ sql:column("PD.Name") }" >
        { 
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1])) 
         } 
     </Product>
 ') as Result
FROM Production.ProductModel PD
WHERE  PD.ProductModelID=28

WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
    <Product 
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
        ProductModelName = "{ sql:column("PD.Name") }" >
        { 
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1])) 
         } 
     </Product>
 ') as Result
FROM Production.ProductModel PD
WHERE  PD.ProductModelID=28

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

  • select yan tümcesinde CatalogDescription is bir xml sütun türü. Bu nedenle, query() yöntemi (xml veri türü), Instructions.query(), kullanılır. XQuery deyimini sorgu yöntemine argüman olarak belirtilir.

  • Sorgu karşı yürütüldüğü belge ad alanları kullanır. Bu nedenle, ad anahtar sözcüğünü önek için ad alanı tanımlamak üzere kullanılır. Daha fazla bilgi için, bkz. XQuery giriş.

Sonuç şudur:

<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>

<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>

Önceki sorgu, belirli bir ürün bilgilerini alır. Aşağıdaki sorgu xml katalog açıklamaları için depolanan tüm ürünler için aynı bilgileri alır. Exist() yöntemi xml veri türü satır xml belgesine sahip, where yan tümcesi doğru verir bir <ProductDescription> öğesi.

WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)

SELECT CatalogDescription.query('
    <Product 
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }" 
        ProductName = "{ sql:column("PD.Name") }" >
        { 
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1])) 
         } 
     </Product>
 ') as Result
FROM Production.ProductModel PD
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1

WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)

SELECT CatalogDescription.query('
    <Product 
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }" 
        ProductName = "{ sql:column("PD.Name") }" >
        { 
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1])) 
         } 
     </Product>
 ') as Result
FROM Production.ProductModel PD
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1

Boole değeri tarafından döndürülen Not exist() yöntemi xml tip 1 ile karşılaştırılır.

Uygulama kısıtlamaları

Bu sınırlamalar şunlardır:

  • Concat() SQL Server işlevi yalnızca değerleri türü xs: String, kabul. Diğer değerleri XS veya xdt: untypedAtomic açıkça döküm gerekir.

Ayrıca bkz.

Başvuru

Xml veri türü karşı XQuery işlevleri