Поделиться через


Выражения запросов и универсальные имена ресурсов

В моделях объектов SMO SQL Server и оснастках 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

Например, укажите имя Server для класса ServerCollection и имя Database для класса DatabaseCollection .

@PropertyName
Указывает имя одного из свойств класса, связанного с объектом, который задан в Object. Перед этим именем свойства должен стоять символ @. Например, укажите @IsAnsiNull для свойства IsAnsiNull класса Database.

@BooleanPropertyName=true()
Перечисляет все объекты, где указанное логическое свойство имеет значение TRUE.

@BooleanPropertyName=false()
Перечисляет все объекты, где указанное логическое свойство имеет значение FALSE.

contains(@StringPropertyName, 'PatternString')
Перечисляет все объекты, указанное строковое свойство которых содержит хотя бы одно вхождение набора символов, который указан в 'PatternString'.

@StringPropertyName='PatternString'
Перечисляет все объекты, значение указанного строкового свойства которых точно такое же, как комбинация символов, указанная в 'PatternString'.

@DatePropertyName= datetime('DateString')
Перечисляет все объекты, значение указанного свойства даты которых соответствует дате, указанной в 'DateString'. ЗначениеDateString должно иметь формат гггг-мм-дд чч:ми:сс.ммм

гггг Год из четырех цифр.
ММ Месяц из двух цифр (от 01 до 12).
дд День из двух цифр (от 01 до 31).
hh Час из двух цифр в 24-часовом формате (от 01 до 23).
ми Минута из двух цифр (от 01 до 59).
сс Секунда из двух цифр (от 01 до 59).
ммм Количество миллисекунд (от 001 до 999).

Даты, указанные в этом формате, можно вычислять с любым форматом даты, хранящимся в SQL Server.

is_null(@PropertyName)
Перечисляет все объекты, где указанное свойство имеет значение NULL.

not(<PropertyExpression>)
Инвертирует значение вычисленного выражения PropertyExpression, перечисляя все объекты, не соответствующие условию, заданному в PropertyExpression. Например, not(contains(@Name, 'xyz')) перечисляет все объекты, в именах которых нет строки xyz.

Remarks

Выражения запроса — это строки, которые перечисляют узлы в иерархии моделей SMO. У каждого узла есть критерий фильтра, задающий условие для определения того, какие объекты в этом узле будут перечисляться. Выражения запроса моделируются на языке выражений XPath. Выражения запроса представляют собой небольшое подмножество выражений XPath, кроме того, в них есть некоторые выражения, которых нет в XPath. Выражения XPath — это строки, которые указывают набор критериев, используемых для перечисления одного или нескольких тегов в XML-документе. Дополнительные сведения об XPath см. в разделе Язык W3C XPath.

Выражения запроса должны начинаться с абсолютной ссылки на объект сервера. Относительные выражения, начинающиеся с символа /, не допустимы. Последовательность объектов, указанных в выражении запроса, должна соответствовать иерархии коллекции объектов в связанной модели объекта. Например, выражение запроса, которое ссылается на объекты в пространстве имен Microsoft.SqlServer.Management.Smo, должно начинаться с узла сервера, за которым идет узел базы данных, и так далее.

Если для объекта не указан критерий <FilterExpression>, перечисляются все объекты в этом узле.

Универсальные имена ресурсов (URN)

Имена URN представляют собой подмножество выражений запроса. Каждое имя URN является полной ссылкой на один объект. В обычном имени URN свойство «Имя» используется для определения одного объекта в каждом узле. Например, данное имя 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()]  

Б. Перечисление объектов при помощи функции contains

Следующее выражение запроса перечисляет все базы данных, в которых учитывается регистр и в имени которых имеется символ «m».

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

В. Перечисление объектов при помощи функции not

Это выражение запроса перечисляет все таблицы базы данных AdventureWorks2012, которые не находятся в схеме Production и содержат в имени таблицы слово "History":

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

Г. Отсутствие критерия фильтра для итогового узла

Следующее выражение запроса перечисляет все столбцы в таблице AdventureWorks2012.Sales.SalesPerson :

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

Д. Перечисление объектов при помощи функции datetime

Следующее выражение запроса перечисляет все таблицы, созданные в базе данных AdventureWorks2012 в определенное время:

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

Е. Перечисление объектов при помощи функции is_null

Следующее выражение запроса перечисляет все таблицы в базе данных AdventureWorks2012 , значение свойства «Дата последнего изменения» в которых не равно NULL:

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

См. также:

Invoke-PolicyEvaluation, командлет
Подсистема аудита SQL Server (Database Engine)