Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:SQL Server
Accepteert nul of meer strings als argumenten en geeft een string terug die is gemaakt door de waarden van elk van deze argumenten samen te zetten.
Syntax
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
Arguments
$string
Optionele string om te koppelen.
Remarks
De functie vereist ten minste twee argumenten. Als een argument een lege reeks is, wordt het behandeld als de reeks van nullengte.
Aanvullende tekens (surrogaatparen)
Het gedrag van surrogaatparen in XQuery-functies is afhankelijk van het compatibiliteitsniveau van de database en in sommige gevallen de standaardnaamruimte-URI voor functies. Voor meer informatie, zie ALTER DATABASE Compatibiliteitsniveau (Transact-SQL) en Collatie en Unicode Support.
Examples
Dit onderwerp biedt XQuery-voorbeelden tegen XML-instanties die zijn opgeslagen in verschillende xml-type kolommen in de AdventureWorks-voorbeelddatabase.
A. Gebruik van de concat() XQuery-functie om strings te concateneren
Voor een specifiek productmodel levert deze query een string terug die is aangemaakt door de garantieperiode en de garantiebeschrijving aan elkaar te koppelen. In het catalogusbeschrijvingsdocument bestaat het <Warranty>element uit<WarrantyPeriod> en <Description> kindelementen.
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
Let op het volgende uit de vorige query:
In de SELECT-clausule is CatalogDescription een kolom van het xml-type . Daarom wordt de query()-methode (XML-datatype), Instructions.query(), gebruikt. De XQuery-instructie wordt gespecificeerd als het argument voor de querymethode.
Het document waarop de query wordt uitgevoerd, gebruikt namespaces. Daarom wordt het namespace-keyword gebruikt om het prefix voor de namespace te definiƫren. Voor meer informatie, zie XQuery Prolog.
Dit is het resultaat:
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
De vorige query haalt informatie op voor een specifiek product. De volgende zoekopdracht haalt dezelfde informatie op voor alle producten waarvoor XML-catalogusbeschrijvingen zijn opgeslagen. De exist() -methode van het xml-datatype in de WHERE-clausule geeft True terug als het XML-document in de rijen een <ProductDescription> element heeft.
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
Let op dat de Booleaanse waarde die door de exist()- methode van het xml-type wordt teruggegeven, wordt vergeleken met 1.
Implementatiebeperkingen
Dit zijn de beperkingen:
- De concat()-functie in SQL Server accepteert alleen waarden van type xs:string. Andere waarden moeten expliciet worden gecast naar xs:string of xdt:untypedAtomic.