concat 函數 (XQuery)
接受零或更多的字串以做為引數,並傳回串連每個引數的值所建立的字串。
語法
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
引數
- $string
要串連的選擇性字串。
備註
函數至少需要兩個引數。如果引數是空白時序,將以零長度的字串處理。
範例
本主題是針對 XML 執行個體提供 XQuery 範例,這些執行個體是儲存在 AdventureWorks2008R2 範例資料庫的數個 xml 類型資料行中。如需這些資料行的概觀,請參閱<在 AdventureWorks2008R2 資料庫中的 xml 資料類型表示法>。
A. 使用 concat() XQuery 函數串連字串
對於特定產品型號,此查詢將傳回透過串連警告期限與警告描述所建立的字串。在目錄描述文件中,<Warranty> 元素是由 <WarrantyPeriod> 與 <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;
請注意下列項目是從上一個查詢而來:
在 SELECT 子句中,CatalogDescription 是 xml 類型的資料行。因此,將會使用 query() 方法 (XML 資料類型)、Instructions.query()。XQuery 陳述式是指定成查詢方法的引數。
查詢所執行的文件將會使用命名空間。因此,namespace 關鍵字是用以定義命名空間的前置詞。如需詳細資訊,請參閱<XQuery 初構>。
以下是結果:
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
下列查詢會擷取特定產品的資訊。下列查詢會擷取儲存 XML 目錄描述的所有產品之相同資訊。如果資料列中的 XML 文件有 <ProductDescription> 元素,WHERE 子句中 xml 資料類型的 exist() 方法就會傳回 True。
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
請注意 xml 類型的 exist() 方法所傳回的布林值是與 1 比較。
實作限制
以下為其限制:
- 在 SQL Server 中的 concat() 函數只接受 xs:string 類型的值。其他的值必須明確地轉換成 xs:string 或 xdt:untypedAtomic。