分享方式:


查詢表達式和統一資源名稱

SQL Server 管理物件 (SMO) 模型和 SQL Server PowerShell 嵌入式管理單元使用兩種類型的運算式字串,類似於 XPath 表達式。 查詢表達式是字串,指定一組準則,用來列舉物件模型階層中的一或多個物件。 統一資源名稱 (URN) 是特定類型的查詢表示式字串,可唯一識別單一物件。

注意

有兩個 SQL Server PowerShell 模組;SqlServerSQLPS

SqlServer 模組是要使用的目前 PowerShell 模組。

SQLPS 模組 隨附於 SQL Server 安裝中,但不再更新。

SqlServer 模組包含 SQLPS 中更新的 Cmdlet 版本,並包含新的 Cmdlet 以支援最新的 SQL 功能。

PowerShell 資源庫安裝 SqlServer 模組。

如需詳細資訊,請流覽 SQL Server PowerShell

語法

Object1 [ <FilterExpression1> ] / ... /ObjectN [ <FilterExpressionN> ]

<FilterExpression>::=
<PropertyExpression> [ and <PropertyExpression> ] [ ...n ]

<PropertyExpression>::=
      @BooleanPropertyName = true()
 | @BooleanPropertyName = false()
 | contains(@StringPropertyName , 'PatternString')
  | @StringPropertyName = 'String'
 | @DatePropertyName = datetime('DateString')
 | is_null(@PropertyName)
 | not(<PropertyExpression>)

參數

物件
指定表達式字串之節點所表示的物件類型。 每個物件都代表來自這些 SMO 物件模型命名空間的集合類別:

<xref:Microsoft.SqlServer.Management.Smo>
<xref:Microsoft.SqlServer.Management.Smo.Agent>
<xref:Microsoft.SqlServer.Management.Smo.Broker>
<xref:Microsoft.SqlServer.Management.Smo.Mail>
<xref:Microsoft.SqlServer.Management.Dmf>
<xref:Microsoft.SqlServer.Management.Facets>
<xref:Microsoft.SqlServer.Management.RegisteredServers>
<xref:Microsoft.SqlServer.Management.Smo.RegSvrEnum>

例如,針對 ServerCollection 類別指定 Server、DatabaseCollection 類別的 Database。

@ PropertyName
指定類別的其中一個屬性名稱,該屬性與 Object中指定的對象相關聯。 屬性的名稱前面必須加上 @ 字元。 例如,針對IsAnsiNull指定 Database 類別 屬性的@IsAnsiNull。

@ 布爾值PropertyName=true()
列舉指定布爾值屬性設定為TRUE的所有物件。

@ 布爾值PropertyName=false()
列舉指定布爾值屬性設定為 FALSE 的所有物件。

contains(@StringPropertyName, 'PatternString')
列舉指定之字串屬性包含至少一個出現在 'PatternString' 中指定的字元集的所有物件。

@ StringPropertyName='PatternString'
列舉指定之字串屬性的值與 'PatternString' 中指定的字元模式完全相同的所有物件。

@ DatePropertyName= datetime('DateString')
列舉指定之 date 屬性的值符合 'DateString' 中指定的日期的所有物件。 DateString 必須遵循 yyyy-mm-dd hh:mi:ss.mmm 格式。

DateString 元件 描述
yyyy 四位數年份。
毫米 兩位數月份 (01 到 12)。
dd 兩位數日期(01 到 31)。
hh 使用24小時制的兩位數小時 (01到23)。
兩位數分鐘 (01 到 59)。
ss 兩位數秒 (01 到 59)。
毫秒數(001 到 999)。

這個格式所指定的日期,可以針對儲存在 SQL Server 中的任何日期格式進行評估。

is_null(@PropertyName
列舉指定屬性具有 NULL 值的所有物件。

not(<PropertyExpression>)
否定 PropertyExpression的評估值,列舉不符合 PropertyExpression 中所指定條件的所有物件。 例如,not(contains(@Name,『xyz』))會列舉名稱中沒有字串 xyz 的所有物件。

言論

查詢表達式是列舉 SMO 模型階層中節點的字串。 每個節點都有一個篩選表達式,指定用來判斷該節點上哪些物件列舉的準則。 查詢表達式是以 XPath 運算式語言建立模型。 查詢表達式會實作 XPath 所支援的運算式小子集,而且在 XPath 中也有一些找不到的延伸模組。 XPath 運算式是字串,指定一組準則,用來列舉 XML 檔中的一或多個標記。 如需 XPath 的詳細資訊,請參閱 W3C XPath 語言

查詢表達式的開頭必須是 Server 對象的絕對參考。 不允許具有前置 / 的相對表達式。 查詢表達式中指定的物件序列必須遵循相關聯物件模型中集合物件的階層。 例如,參考 Microsoft.SqlServer.Management.Smo 命名空間中對象的查詢表達式必須以伺服器節點開頭,後面接著 Database 節點等等。

如果未為物件指定 <FilterExpression>,則會列舉該節點的所有物件。

統一資源名稱 (URN)

URN 是查詢表達式的子集。 每個 URN 都會形成單一物件的完整參考。 典型的 URN 會使用 Name 屬性來識別每個節點上的單一物件。 例如,此 URN 是指特定資料行:

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022']/Table[@Name='SalesPerson' and @Schema='Sales']/Column[@Name='SalesPersonID']

例子

一個。 使用 false() 列舉物件

此查詢表達式會列舉在 MyComputer的預設實例中,AutoClose 屬性設定為 false 的所有資料庫。

Server[@Name='MYCOMPUTER']/Database[@AutoClose=false()]

B. 使用 contains 列舉物件

此查詢表達式會列舉不區分大小寫且名稱中有字元 『m』 的所有資料庫。

Server[@Name='MYCOMPUTER']/Database[@CaseSensitive=false() and contains(@Name, 'm')]

C. 使用 not 列舉物件

此查詢表示式會列舉不在 Production 架構中的所有 AdventureWorks2022 數據表,並在數據表名稱中包含 History 一詞:

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022']/Table[not(@Schema='Production') and contains(@Name, 'History')]

D. 未提供最終節點的篩選表達式

此查詢表達式會列舉 adventureWorks2022.Sales.SalesPerson 數據表中 所有數據行:

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022"]/Table[@Schema='Sales' and @Name='SalesPerson']/Columns

E. 使用 datetime 列舉物件

此查詢表示式會列舉在特定時間在 AdventureWorks2022 資料庫中建立的所有資料表:

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022"]/Table[@CreateDate=datetime('2008-03-21 19:49:32.647')]

F. 使用 is_null 列舉物件

此查詢表示式會列舉 AdventureWorks2022 資料庫中沒有 NULL 的所有數據表,其上次修改的日期屬性:

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022"]/Table[Not(is_null(@DateLastModified))]