Выражения запроса и уникальные имена ресурсов
В моделях объектов SMO SQL Server и оснастках SQL Server используется два типа строк выражений, которые похожи на выражения 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>)
Аргументы
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 для свойства IsAnsiNull класса Database.@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.
Выражения запроса должны начинаться с абсолютной ссылки на объект сервера. Относительные выражения, начинающиеся с символа /, не допустимы. Последовательность объектов, указанных в выражении запроса, должна соответствовать иерархии коллекции объектов в связанной модели объекта. Например, выражение запроса, которое ссылается на объекты в пространстве имен Microsoft.SqlServer.Management.Smo, должно начинаться с узла сервера, за которым идет узел базы данных и так далее.
Если критерий <FilterExpression> для объекта не указан, перечисляются все объекты в этом узле.
Уникальные имена ресурсов (URN)
Имена URN представляют собой подмножество выражений запроса. Каждое имя URN является полной ссылкой на один объект. В обычном имени URN свойство «Имя» используется для определения одного объекта в каждом узле. Например, данное имя URN ссылается на определенный столбец:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks']/Table[@Name='SalesPerson' and @Schema='Sales']/Column[@Name='SalesPersonID']
Примеры
А. Перечисление объектов при помощи false()
Следующее выражение запроса перечисляет все базы данных, в которых атрибут AutoClose имеет значение false, в экземпляре по умолчанию на МойКомпьютер.
Server[@Name='MYCOMPUTER']/Database[@AutoClose=false()]
Б. Перечисление объектов при помощи contains
Следующее выражение запроса перечисляет все базы данных, в которых учитывается регистр и в имени которых имеется символ «m».
Server[@Name='MYCOMPUTER']/Database[@CaseSensitive=false() and contains(@Name, 'm')]
В. Перечисление объектов при помощи not
Следующее выражение запроса перечисляет все таблицы базы данных AdventureWorks, которые не находятся в схеме Production и в имени которых есть слово «Журнал»:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks']/Table[not(@Schema='Production') and contains(@Name, 'History')]
Г. Отсутствие критерия фильтра для итогового узла
Следующее выражение запроса перечисляет все столбцы в таблице AdventureWorks.Sales.SalesPerson:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks"]/Table[@Schema='Sales' and @Name='SalesPerson']/Columns
Д. Перечисление объектов при помощи datetime
Следующее выражение запроса перечисляет все таблицы, созданные в базе данных AdventureWorks в определенное время:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks"]/Table[@CreateDate=datetime('2008-03-21 19:49:32.647')]
Е. Перечисление объектов при помощи is_null
Следующее выражение запроса перечисляет все таблицы в базе данных AdventureWorks, значение свойства «Дата последнего изменения» которых не равно NULL:
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks"]/Table[Not(is_null(@DateLastModified))]
См. также