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.