Выражения запросов и универсальные имена ресурсов
В моделях объектов SMO SQL Server и оснастках SQL Server используется два типа строк выражений, которые похожи на выражения 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>)
Аргументы
Object
Указывает тип объекта, который представлен в узле строки выражения. Каждый объект представляет класс коллекции из этих пространств имен объектной модели 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 для свойства класса Database IsAnsiNull.@BooleanPropertyName=true()
Перечисляет все объекты, где указанное логическое свойство имеет значение TRUE.@BooleanPropertyName=false()
Перечисляет все объекты, где указанное логическое свойство имеет значение FALSE.contains(@StringPropertyName, 'PatternString')
Перечисляет все объекты, где указанное строковое свойство содержит хотя бы одно вхождение набора символов, указанного в строке 'PatternString'.@StringPropertyName='PatternString'
Перечисляет все объекты, где значение указанного строкового свойства совпадает с шаблоном символов, указанным в строке 'PatternString'.@DatePropertyName= datetime('DateString')
Перечисляет все объекты, где значение указанного свойства даты соответствует дате, указанной в строке 'DateString'. Значение DateString должно иметь формат гггг-мм-дд чч:ми:сс.мммгггг
Год из четырех цифр.
мм
Месяц из двух цифр (от 01 до 12).
дд
День из двух цифр (от 01 до 31).
чч
Час из двух цифр в 24-часовом формате (от 01 до 23).
ми
Минута из двух цифр (от 01 до 59).
сс
Секунда из двух цифр (от 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.
Выражения запроса должны начинаться с абсолютной ссылки на объект сервера. Относительные выражения, начинающиеся с символа /, не допустимы. Последовательность объектов, указанных в выражении запроса, должна соответствовать иерархии коллекции объектов в связанной модели объекта. Например, выражение запроса, которое ссылается на объекты в пространстве имен 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']
Примеры
А.Перечисление объектов при помощи функции false()
Следующее выражение запроса перечисляет все базы данных, в которых атрибут AutoClose имеет значение false, в экземпляре по умолчанию на MyComputer.
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))]