主要表示式 (XQuery)
適用於:SQL Server
XQuery 主要表示式包含常值、變數參考、內容項目表達式、建構函式和函數調用。
常值
XQuery 常值可以是數值或字串常值。 字串常值可以包含預先定義的實體參考,而實體參考則是字元序列。 序列的開頭為 ampersand,代表可能具有語法意義的單一字元。 以下是 XQuery 的預先定義實體參考。
實體參考 | 代表 |
---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
字串常值也可以包含字元參考、Unicode 字元的 XML 樣式參考,其十進位或十六進位字碼點所識別。 例如,歐元符號可以透過字元參考 “€” 來表示。
注意
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 > 50000 and < 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 初構中的函數宣告。
不支援函數匯入。