布林值的相關函式 - 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()* 類型的自變數,或空序列。