共用方式為


資料存取子函式 - 字串 (XQuery)

適用於:SQL Server

傳回以字串表示的$arg

語法

  
fn:string() as xs:string  
fn:string($arg as item()?) as xs:string  

引數

$arg
這是節點或不可部分完成的值。

備註

  • 如果 $arg 為空序列,則會傳回長度為零的字串。

  • 如果 $arg 是節點,函式會傳回使用 string-value 存取子取得之節點的字串值。 這定義於 W3C XQuery 1.0 和 XPath 2.0 數據模型規格中。

  • 如果 $arg 是不可部分完成的值,則函式會傳回表達式轉換成 xs:string 所傳回的相同字串$arg,除非另有註明。

  • 如果$arg的類型xs:anyURI,URI 就會轉換成字串,而不會逸出特殊字元。

  • 在此實作中, 沒有自變數的 fn:string() 只能在內容相依述詞的內容中使用。 具體來說,它只能在括弧 ([ ]) 內使用。

範例

本主題針對 AdventureWorks 資料庫中各種 xml 類型數據行中儲存的 XML 實例,提供 XQuery 範例。

A. 使用字串函式

下列查詢會<Features>擷取 專案的子項目節點。<ProductDescription>

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
 /PD:ProductDescription/PD:Features  
')  
FROM Production.ProductModel  
WHERE ProductModelID=19  

以下是部份結果:

<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">  
   These are the product highlights.   
   <p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
    <p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>  
    <p1:Description>parts and labor</p1:Description>  
   </p1:Warranty>  
       ...  
</PD:Features>  

如果您指定 string() 函式,您會收到指定節點的字串值。

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
 string(/PD:ProductDescription[1]/PD:Features[1])  
')  
FROM Production.ProductModel  
WHERE ProductModelID=19  

以下是部份結果。

These are the product highlights.   
3 yearsparts and labor...    

B. 在各種節點上使用字串函式

在下列範例中,XML 實例會指派給 xml 類型變數。 系統會指定查詢來說明將 string() 套用至各種節點的結果。

declare @x xml  
set @x = '<?xml version="1.0" encoding="UTF-8" ?>  
<!--  This is a comment -->  
<root>  
  <a>10</a>  
just text  
  <b attr="x">20</b>  
</root>  
'  

下列查詢會擷取文件節點的字串值。 這個值是由串連其所有子代文字節點的字串值所形成。

select @x.query('string(/)')  

以下是結果:

This is a comment 10  
just text  
 20  

下列查詢會嘗試擷取處理指令節點的字串值。 結果是空序列,因為它不包含文字節點。

select @x.query('string(/processing-instruction()[1])')  

下列查詢會擷取批注節點的字串值,並傳回文字節點。

select @x.query('string(/comment()[1])')  

以下是結果:

This is a comment   

另請參閱

針對 xml 資料類型的 XQuery 函式