適用於:SQL Server
接受零個或多個字串做為自變數,並傳回串連每個自變數值所建立的字串。
語法
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
引數
$string
要串連的選擇性字串。
備註
函式至少需要兩個自變數。 如果自變數是空序列,則會將其視為長度為零的字串。
補充字元 (Surrogate 字組)
XQuery 函式中 Surrogate 配對的行為取決於資料庫相容性層級,在某些情況下,則取決於函式的預設命名空間 URI。 更多資訊請參閱 ALTER DATABASE 相容性等級(Transact-SQL) 及 校對與Unicode支援。
範例
本主題針對 AdventureWorks 範例資料庫中各種 xml 類型數據行中儲存的 XML 實例提供 XQuery 範例。
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 Prolog。
以下是結果:
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
先前的查詢會擷取特定產品的資訊。 下列查詢會針對儲存 XML 目錄描述的所有產品擷取相同的資訊。
WHERE 子句中 xml 資料類型的 exist() 方法會傳回 True,如果數據列中的 XML 檔有 元素<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
請注意,xml 類型的 exist() 方法所傳回的布爾值與 1 比較。
實作限制
以下是限制:
- SQL Server 中的 concat() 函式只接受 xs:string 類型的值。 其他值必須明確地轉換成 xs:string 或 xdt:untypedAtomic。