not 函數 (XQuery)
如果 $arg 的有效布林值為 false,就會傳回 TRUE,而如果 $arg 的有效布林值為 true,就會傳回 FALSE。
語法
fn:not($arg as item()*) as xs:boolean
引數
- $arg
具有效布林值的一連串項目。
範例
本主題針對 XML 執行個體提供 XQuery 範例,這些執行個體是儲存在 AdventureWorks 資料庫的各種 xml 類型資料行中。
A.使用 not() XQuery 函數尋找其目錄描述不包含 <Specifications> 元素的產品型號
以下查詢會建構 XML,而此 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 初構中使用 declare namespace 關鍵字的另一個選擇是定義前置詞。
接著此查詢會建構包含 <Product> 元素以及其 ProductModelID 屬性的 XML。
WHERE 子句會使用 exist() 方法 (XML 資料類型)篩選資料列。 如果有 <ProductDescription> 元素沒有 <Specification> 子元素,exist() 方法就會傳回 True。 請記下 not() 函數的用法。
因為每個產品型號目錄描述都包含 <Specifications> 元素,所以此結果集為空白。
B.使用 not() XQuery 函數擷取沒有 MachineHours 屬性的工作中心位置
以下查詢是針對 Instructions 資料行而指定。 此資料行儲存了產品型號的製造指示。
對於特定的產品型號,此查詢會擷取未指定 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 初構中的 declare namespace 會定義 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()* 的引數,或是空白時序。