分享方式:


主要運算式 (XQuery)

適用於:SQL Server

XQuery 主要運算式包含常值、變數參考、內容專案運算式、建構函式和函式呼叫。

常值

XQuery 常值可以是數值或字串常值。 字串常值可以包含預先定義的實體參考,而實體參考則是字元序列。 序列的開頭為 ampersand,代表可能具有語法意義的單一字元。 以下是 XQuery 的預先定義實體參考。

實體參考 代表
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

字串常值也可以包含字元參考、Unicode 字元的 XML 樣式參考,其十進位或十六進位字碼點所識別。 例如,歐元符號可以透過字元參考 「 & #8364;」 來表示。

注意

SQL Server 使用 XML 1.0 版作為剖析的基礎。

範例

下列範例說明常值以及實體和字元參考的使用方式。

此程式碼會傳回錯誤,因為 <''> 字元具有特殊意義。

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')  
GO  

如果您改用實體參考,查詢會運作。

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary &gt; 50000 and &lt; 100000</SalaryRange>')  
GO  

下列範例說明如何使用字元參考來表示 Euro 符號。

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <a>€12.50</a>')  

以下是結果。

<a>€12.50</a>

在下列範例中,查詢是以單引號分隔。 因此,字串值中的單引號是由兩個連續的單引號表示。

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>I don''t know</a>')  
Go  

以下是結果。

<a>I don't know</a>

內建布耳函數 true() false() 可用來表示布林值,如下列範例所示。

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>{true()}</a>')  
GO  

direct 元素建構函式會指定大括弧中的運算式。 這會由產生的 XML 中的值取代。

以下是結果。

<a>true</a>

變數參考

XQuery 中的變數參考是 QName 前面加上 $ 符號。 此實作僅支援未取代的變數參考。 例如,下列查詢會在 FLWOR 運算式中定義 變數 $i

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
 for $i in /root return data($i)')  
GO  

下列查詢將無法運作,因為命名空間前置詞會新增至變數名稱。

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
DECLARE namespace x="https://X";  
for $x:i in /root return data($x:i)')  
GO  

您可以使用 sql:variable() 擴充函數來參考 SQL 變數,如下列查詢所示。

DECLARE @price money  
SET @price=2500  
DECLARE @x xml  
SET @x = ''  
SELECT @x.query('<value>{sql:variable("@price") }</value>')  

以下是結果。

<value>2500</value>

實作限制

以下是實作限制:

  • 不支援命名空間前置詞為的變數。

  • 不支援模組匯入。

  • 不支援外部變數宣告。 此解決方案是使用 sql:variable() 函式

內容專案運算式

內容專案是目前正在路徑運算式內容中處理的專案。 它會使用檔節點在非 Null XML 資料類型實例中初始化。 在 XPath 運算式的內容或 [] 述詞中,也可以由 nodes() 方法變更。

內容專案是由包含點 (.) 的運算式所傳回。 例如,下列查詢會評估屬性 是否存在的每個專案 <a> 。 attr 如果屬性存在,則會傳回 專案。 請注意,述詞中的條件指定內容節點是由單一句號指定。

DECLARE @var XML  
SET @var = '<ROOT>  
<a>1</a>  
<a attr="1">2</a>  
</ROOT>'  
SELECT @var.query('/ROOT[1]/a[./@attr]')  

以下是結果。

<a attr="1">2</a>

函式呼叫

您可以呼叫內建的 XQuery 函式和 SQL Server sql:variable() 和 sql:column() 函式。 如需實作的函式清單,請參閱 針對 xml 資料類型 的 XQuery 函式。

實作限制

以下是實作限制:

  • 不支援 XQuery 初構中的函數宣告。

  • 不支援函數匯入。

另請參閱

XML 建構 (XQuery)