查询表达式和唯一资源名称

SQL Server 管理对象 (SMO) 模型和 SQL Server PowerShell 管理单元使用与 XPath 表达式相似的两种类型的表达式。查询表达式是指定一组条件的字符串,用于枚举对象模型层次结构中的一个或多个对象。唯一资源名称 (URN) 是一种特定类型的查询表达式字符串,用于唯一标识单个对象。

语法

Object1[<FilterExpression1>]/ ... /ObjecN[<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 类指定数据库。

  • @属性名称
    指定与对象中指定的对象相关联的类的其中一个属性的名称。属性的名称必须以字符 @ 作为前缀。例如,为 Database 类的 IsAnsiNull 属性指定 @IsAnsiNull。

  • @布尔属性名称=true()
    枚举指定的布尔属性设置为 TRUE 的所有对象。

  • @布尔属性名称=false()
    枚举指定的布尔属性设置为 FALSE 的所有对象。

  • contains(@字符串属性名称, '模式字符串')
    枚举指定的字符串属性中包含“模式字符串”中指定的一组字符(至少出现一次)的所有对象。

  • @字符串属性名称='模式字符串'
    枚举指定字符串属性的值与“模式字符串”中指定的字符模式完全相同的所有对象。

  • @日期属性名称= datetime('日期字符串')
    枚举指定日期属性的值与“日期字符串”中指定的日期相匹配的所有对象。日期字符串必须遵循格式 yyyy-mm-dd hh:mi:ss.mmm

    yyyy

    四位数年份。

    mm

    两位数月份(01 到 12)。

    dd

    两位数日期(01 到 31)。

    hh

    24 小时制的两位数小时(01 到 23)。

    mi

    两位数分钟(01 到 59)。

    ss

    两位数秒数(01 到 59)。

    mmm

    毫秒数(001 到 999)。

    可以按照存储在 SQL Server 中的任何日期格式,计算以此格式指定的日期。

  • is_null(@属性名称)
    枚举指定属性的值为 NULL 的所有对象。

  • not(<PropertyExpression>)
    对 PropertyExpression 的计算值求反,枚举与 PropertyExpression 中指定的条件不匹配的所有对象。例如,not(contains(@Name, 'xyz')) 枚举名称中不含字符串 xyz 的所有对象。

注释

查询表达式是一些字符串,用于枚举 SMO 模型层次结构中的节点。每个节点有一个筛选表达式,指定用于确定要枚举该节点的哪些对象的条件。查询表达式在 XPath 表达式语言上建模。查询表达式实现了 XPath 支持的一小部分表达式,还具有 XPath 中不提供的一些扩展。XPath 表达式是一些字符串,指定用于枚举 XML 文档中的一个或多个标记的一组条件。有关 XPath 的详细信息,请参阅 W3C XPath Language(W3C Xpath 语言)。

查询表达式必须以对服务器对象的绝对引用开头。不允许使用以 / 开头的相对表达式。查询表达式中指定的对象的顺序必须遵循相关对象模型中集合对象的层次结构。例如,引用 Microsoft.SqlServer.Management.Smo 命令空间中对象的查询表达式必须从服务器节点开始,接下来才是数据库节点等。

如果没有为对象指定 <FilterExpression>,将枚举该节点的所有对象。

唯一资源名称 (URN)

URN 是查询表达式的子集。每个 URN 形成对单个对象的完全限定引用。典型的 URN 使用 Name 属性来标识每个节点的单个对象。例如,该 URN 引用一个特定列:

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

示例

A. 使用 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 架构中、而且表名中包含“History”一词的所有 AdventureWorks2008R2 表:

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

D. 不为最终节点提供筛选表达式

此查询表达式枚举 AdventureWorks2008R2.Sales.SalesPerson 表中的所有列:

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

E. 使用 datetime 枚举对象

此查询表达式枚举 AdventureWorks2008R2 数据库中于特定时间创建的所有表:

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

F. 使用 is_null 枚举对象

此查询表达式枚举 AdventureWorks2008R2 数据库中上次修改日期属性不为 Null 的所有表:

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