SQL Server 管理物件 (SMO) 模型和 SQL Server PowerShell 嵌入式管理單元使用兩種類型的運算式字串,類似於 XPath 表達式。 查詢表達式是字串,指定一組準則,用來列舉物件模型階層中的一或多個物件。 統一資源名稱 (URN) 是特定類型的查詢表示式字串,可唯一識別單一物件。
語法
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 物件模型命名空間的集合類別:
Microsoft.SqlServer.Management.Smo
Microsoft.SqlServer.Management.Smo.Agent
Microsoft.SqlServer.Management.Smo.Broker
Microsoft.SqlServer.Management.Smo.Mail
Microsoft.SqlServer.Management.Dmf
Microsoft.SqlServer.Management.Facets
Microsoft.SqlServer.Management.RegisteredServers
Microsoft.SqlServer.Management.Smo.RegSvrEnum
例如,針對 ServerCollection 類別、 DatabaseCollection 類別指定 DatabaseCollection 類別的 Database。
@
PropertyName
指定與 Object 中所指定之物件相關聯之類別之其中一個屬性的名稱。 屬性的名稱前面必須加上 @ 字元。 例如,為 Database 類別屬性 IsAnsiNull 指定@IsAnsiNull。
@
BooleanPropertyName=true()
列舉指定布爾值屬性設定為TRUE的所有物件。
@
BooleanPropertyName=false()
列舉指定布爾值屬性設定為 FALSE 的所有物件。
contains(@StringPropertyName, 'PatternString')
列舉指定之字串屬性至少包含 『PatternString』 中所指定字元集的一個物件。
@
StringPropertyName='PatternString'
列舉指定之字串屬性的值與 『PatternString』 中指定的字元模式完全相同的所有物件。
@
DatePropertyName= datetime('DateString')
列舉指定之 date 屬性的值符合 'DateString' 中指定的日期的所有物件。
DateString 必須遵循yyyy-mm-dd hh:mi:ss.mmm 格式
| yyyy | 四位數年份。 |
| 毫米 | 兩位數月份(01 到 12)。 |
| dd | 兩位數日期(01 到 31)。 |
| 呵呵 | 使用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='AdventureWorks2012']/Table[@Name='SalesPerson' and @Schema='Sales']/Column[@Name='SalesPersonID']
範例
A。 使用函數 false() 列舉物件
此查詢表達式會列舉 MyComputer 上預設實例中 AutoClose 屬性設定為 false 的所有資料庫。
Server[@Name='MYCOMPUTER']/Database[@AutoClose=false()]
B. 使用「包含」方法枚舉物件
此查詢表達式會列舉不區分大小寫且名稱中有字元 『m』 的所有資料庫。
Server[@Name='MYCOMPUTER']/Database[@CaseSensitive=false() and contains(@Name, 'm')]
C. 使用 not 列舉物件
此查詢表達式會列舉不在生產架構中的所有 AdventureWorks2012 數據表,並在數據表名稱中包含 History 一詞:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012']/Table[not(@Schema='Production') and contains(@Name, 'History')]
D. 未提供最終節點的篩選表達式
此查詢表達式會列舉 AdventureWorks2012.Sales.SalesPerson 數據表中的所有數據行:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[@Schema='Sales' and @Name='SalesPerson']/Columns
E. 使用 datetime 來列舉物件
此查詢表示式會列舉在特定時間在 AdventureWorks2012 資料庫中建立的所有資料表:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[@CreateDate=datetime('2008-03-21 19:49:32.647')]
F. 使用 is_null 列舉物件
此查詢表達式會列舉 AdventureWorks2012 資料庫中沒有 NULL 的所有數據表,這些數據表的日期上次修改屬性沒有 NULL:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[Not(is_null(@DateLastModified))]
另請參閱
Invoke-PolicyEvaluation Cmdlet
SQL Server Audit (Database Engine)