Sdílet prostřednictvím


Funkce pro řetězcové hodnoty – zřetězení

platí pro:SQL Server

Přijímá nula nebo více řetězců jako argumentů a vrátí řetězec vytvořený zřetězením hodnot každého z těchto argumentů.

Syntax

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

Argumenty

$string
Volitelný řetězec ke zřetězení.

Poznámky

Funkce vyžaduje alespoň dva argumenty. Pokud je argument prázdnou sekvencí, považuje se za řetězec nulové délky.

Doplňkové znaky (náhradní dvojice)

Chování náhradních párů ve funkcích XQuery závisí na úrovni kompatibility databáze a v některých případech na výchozím identifikátoru URI oboru názvů pro funkce. Další informace najdete v části Funkce XQuery Jsou náhradní funkce v tématu Zásadní změny funkcí databázového stroje v SQL Serveru 2016. Viz také úroveň kompatibility ALTER DATABASE (Transact-SQL) a kolace a podporu kódování Unicode.

Příklady

Toto téma obsahuje příklady XQuery pro instance XML, které jsou uloženy v různých xml sloupce typů v ukázkové databázi AdventureWorks.

A. Použití funkce concat() XQuery ke zřetězení řetězců

Pro konkrétní produktový model tento dotaz vrátí řetězec vytvořený zřetězením záruční doby a popisu záruky. V dokumentu popisu katalogu se prvek <Warranty> skládá z <WarrantyPeriod> a <Description> podřízených prvků.

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  
  

Všimněte si následujících věcí z předchozího dotazu:

  • V klauzuli SELECT je CatalogDescription sloupec typu xml. Proto se používá metoda query() (datový typ XML), Instructions.query(). Příkaz XQuery je určen jako argument metody dotazu.

  • Dokument, na kterém se dotaz spouští, používá obory názvů. Proto se klíčové slovo oboru názvů používá k definování předpony oboru názvů. Další informace naleznete v tématu XQuery Prolog.

Toto je výsledek:

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

Předchozí dotaz načte informace pro konkrétní produkt. Následující dotaz načte stejné informace pro všechny produkty, pro které jsou uloženy popisy katalogu XML. Metoda exist() datového typu xml v klauzuli WHERE vrátí hodnotu True, pokud má dokument XML v řádcích prvek <ProductDescription>.

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  
  

Všimněte si, že logická hodnota vrácená exist() metodou xml typu je porovnána s hodnotou 1.

Omezení implementace

Toto jsou omezení:

  • Funkce concat() v SQL Serveru přijímá pouze hodnoty typu xs:string. Jiné hodnoty musí být explicitně přetypovány na xs:string nebo xdt:untypedAtomic.

Viz také

funkce XQuery proti datového typu XML