Udostępnij za pośrednictwem


Funkcje w wartościach ciągów — concat

Dotyczy:programu SQL Server

Akceptuje zero lub więcej ciągów jako argumentów i zwraca ciąg utworzony przez łączenie wartości każdego z tych argumentów.

Składnia

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

Argumenty

$string
Opcjonalny ciąg do łączenia.

Uwagi

Funkcja wymaga co najmniej dwóch argumentów. Jeśli argument jest pustą sekwencją, jest traktowany jako ciąg o zerowej długości.

Znaki dodatkowe (pary zastępcze)

Zachowanie par zastępczych w funkcjach XQuery zależy od poziomu zgodności bazy danych i, w niektórych przypadkach, domyślnego identyfikatora URI przestrzeni nazw dla funkcji. Aby uzyskać więcej informacji, zobacz sekcję "XQuery Functions Are Surrogate-Aware" w temacie breaking changes to Database Engine Features in SQL Server 2016. Zobacz również ALTER DATABASE Compatibility Level (Transact-SQL) i collation and Unicode Support.

Przykłady

Ten temat zawiera przykłady zapytania XQuery dla wystąpień XML przechowywanych w różnych kolumnach xml typ w przykładowej bazie danych AdventureWorks.

A. Łączenie ciągów przy użyciu funkcji concat() XQuery

W przypadku określonego modelu produktu to zapytanie zwraca ciąg utworzony przez połączenie okresu gwarancji i opisu gwarancji. W dokumencie opisu wykazu element <Warranty> składa się z elementów podrzędnych <WarrantyPeriod> i <Description>.

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  
  

Zwróć uwagę na następujące elementy z poprzedniego zapytania:

  • W klauzuli SELECT klasa CatalogDescription jest kolumną typu xml xml. W związku z tym jest używana metoda query() (typ danych XML), Instructions.query(). Instrukcja XQuery jest określana jako argument metody query.

  • Dokument, na którym jest wykonywane zapytanie, używa przestrzeni nazw. W związku z tym przestrzeni nazw słowo kluczowe służy do definiowania prefiksu przestrzeni nazw. Aby uzyskać więcej informacji, zobacz XQuery Prolog.

Jest to wynik:

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

Poprzednie zapytanie pobiera informacje dotyczące określonego produktu. Poniższe zapytanie pobiera te same informacje dla wszystkich produktów, dla których są przechowywane opisy wykazu XML. Metoda exist() typu danych xml xml w klauzuli WHERE zwraca wartość True, jeśli dokument XML w wierszach ma element <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  
  

Należy pamiętać, że wartość logiczna zwracana przez metodę exist() typu xml jest porównywana z 1.

Ograniczenia implementacji

Są to ograniczenia:

  • Funkcja concat() w programie SQL Server akceptuje tylko wartości typu xs:string. Inne wartości muszą być jawnie rzutowane na xs:string lub xdt:untypedAtomic.

Zobacz też

funkcji XQuery względem typu danych XML