В состав Microsoft SQL Server 2008 входит инструмент Declarative Management Framework (DMF), который может использоваться для предотвращения изменений в системе, несоответствующих стандартам организации.
Допустим, мы хотели бы внедрить стандарт кодирования, в котором все таблицы, вновь созданные для конкретной базы данных должны начинаться с префикса ‘tbl». Создадим политику. Для теста мы создали базу даных с именем «AdventureWorks».
Давайте откроем SQL Server Management Studio, раскроем ветвь Management (Управление), затем развернем ветвь Policy Management (Управление политиками). Щелкним правой кнопкой мыши Condition (Условие) и выберем пункт создать условие New Condition (Создать условие).
В диалоговом окне при создании нового условия, в поле Name (Имя) введите имя «DBA — Table Name Prefix». После ввода имени выберите Facet — «Table», затем наберите выражение «@Name like ‘tbl%'» и кликнете «ОК»
Напомним, что для тестирования мы хотели применить наши новые политики к базе данных «AdventureWorks». По этой причине мы должны создать новые условия применимые к базе данных «AdventureWorks». Назовем его: «DBA — AdventureWorksDB».
Создадим политику. В Object Explorer (Обозревателе объектов) кликните правой кнопкой мыши Policies (Политика) и выберете New Policy (Создать политику).
В диалоговом окне Create New Policy (Создание новой политики) в поле Name (Имя) введите «DBA — Table Name Prefix Policy» и выберите условие «DBA — Table Name Prefix».
Укажите таблицы и выберите условие «DBA — AdventureWorksDB» для текущей базы данных.
В последнем шаге при создании нашей политики из выпадающего списка выбираем On Change — Prevent (Изменение — запрет) в режиме исполнения. Данное условие позволит запретить создание всех таблиц, кроме тех, которые начинается с префиксом «tbl». Нажимаем кнопку ОК.
Политика создана. Проверим нашу политику, создав таблицу не соответсвующую данному условию, т.е. без префикса «tbl».
Создадим столбец для таблицы и присвоем ей имя «TestTable».
Условие выполнилось. SQL Server Management выдал ошибку: «Таблица ‘TestTable’ не может быть создана. Транзакцияз авершилась в триггере. Выполнение пакета прервано»