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