Выражения запросов и универсальные имена ресурсов
В моделях объектов 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)