布林值的相關函式 - not 函式
適用於:SQL Server
如果$arg 的有效布林值為 false,則傳回 TRUE,如果有效的布林值 $arg為 true,則傳回 FALSE。
語法
fn:not($arg as item()*) as xs:boolean
引數
$arg
有有效布林值的專案序列。
範例
本主題針對 AdventureWorks 資料庫中各種 xml 類型資料行中儲存的 XML 實例,提供 XQuery 範例。
A. 使用 not() XQuery 函式來尋找其目錄描述不包含 < Specifications > 元素的產品模型。
下列查詢會建構 XML,其中包含其目錄描述不包含 <Specifications
> 元素之產品模型的產品模型識別碼。
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Product
ProductModelID="{ sql:column("ProductModelID") }"
/>
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('
/pd:ProductDescription[not(pd:Specifications/*)] '
) = 0
請注意下列項目是從上一個查詢而來:
因為檔使用命名空間,因此範例會使用 WITH NAMESPACES 語句。 另一個選項是使用 XQuery Prolog 中的 declare namespace 關鍵字來定義前置詞。
然後,查詢會建構包含 元素及其 ProductModelID 屬性的 <
Product
> XML。WHERE 子句會使用 exist() 方法 (XML 資料類型) 來篩選資料列。 如果 ProductDescription >< 元素沒有 < Specification > 子項目,則 exist() 方法會傳回 True。 請注意 not() 函式的使用 。
此結果集是空的,因為每個產品型號目錄描述都包含 < Specifications > 元素。
B. 使用 not() XQuery 函式來擷取沒有 MachineHours 屬性的工作中心位置
下列查詢是針對 [指示] 資料行所指定。 此資料行會儲存產品模型的製造指示。
針對特定產品模型,查詢會擷取未指定 MachineHours 的工作中心位置。 也就是說,不會為 < Location > 元素指定 MachineHours 屬性 。
SELECT ProductModelID, Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
for $i in /AWMI:root/AWMI:Location[not(@MachineHours)]
return
<Location LocationID="{ $i/@LocationID }"
LaborHrs="{ $i/@LaborHours }" >
</Location>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
在上述查詢中,請注意下列事項:
XQuery Prolog 中的 declarenamespace 會定義 Adventure Works 製造指令命名空間前置詞。 它代表製造指示檔中所使用的相同命名空間。
在查詢中,如果沒有 MachineHours 屬性, not(@MachineHours) 述詞會傳回 True。
以下是結果:
ProductModelID Result
-------------- --------------------------------------------
7 <Location LocationID="30" LaborHrs="1"/>
<Location LocationID="50" LaborHrs="3"/>
<Location LocationID="60" LaborHrs="4"/>
實作限制
以下是限制:
- not() 函 式只支援 xs:boolean 或 node()* 類型的引數,或空序列。