concat funkcji (XQuery)
Akceptuje zero lub więcej ciągów jako argumenty i zwraca ciąg utworzony przez wartości każdej z tych argumentów.
Składnia
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
Argumenty
- $string
Opcjonalny ciąg łączenia.
Uwagi
Funkcja wymaga co najmniej dwa argumenty.Jeśli argument jest pusty sekwencji, jest traktowana jako ciąg znaków o zerowej długości.
Przykłady
W tym temacie przedstawiono przykłady XQuery przeciwko wystąpień XML, które są przechowywane w różnych xml wpisz kolumn w AdventureWorks2008R2 przykładowej bazy danych.Aby uzyskać omówienie tych kolumn, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
A.Za pomocą funkcja XQuery concat() ciągów
Dla określonego modelu produktu ta kwerenda zwraca ciąg utworzony poprzez konkatenację okres gwarancji i opis gwarancji.W dokumencie opis katalogu <Warranty> element składa się z <WarrantyPeriod> i <Description> elementów podrzędność.
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;
Poniższe z poprzedniej kwerendy:
W klauzula SELECT jest CatalogDescription xml typu kolumna.Dlatego query(), metoda (typ danych XML), Instructions.query(), jest używany.Instrukcja XQuery jest określony jako argument do metoda kwerendy.
Dokument, wobec którego jest wykonywana kwerenda używa nazw.Dlatego nazw słowo kluczowe jest używany do definiowania prefiks obszaru nazw.Aby uzyskać więcej informacji, zobacz XQuery prologu.
Jest to wynikiem:
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
Poprzednie kwerenda pobiera informacje dotyczące określonego produktu.Następująca kwerenda pobiera te same informacje dla wszystkich produktów, dla których opisy wykazu XML są przechowywane.Exist() metoda xml typ danych w klauzula WHERE zwraca wartość PRAWDA, jeśli dokument XML w wierszach ma <ProductDescription> element.
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
Należy zauważyć, że wartość logiczna zwrócony przez exist() metoda xml typu jest porównywana z 1.
Ograniczenia wdrażania
Są następujące ograniczenia:
- Concat() funkcja w programie SQL Server akceptuje tylko wartości typu xs:ciąg.Inne wartości musi wyraźnie być rzutowane na xs:ciąg lub xdt:untypedAtomic.