Управление правилами

Управление правилами. Правила rules являются одним из средств обеспечения целостности данных, хранящихся в базе. Правила оставлены для обеспечения обратной совместимости с предыдущими версиями SQL Server.

В новой версии они заменены ограничениями целостности CHECK, которые являются более мощным средством и определяются при создании таблицы.

Правила же создаются как отдельные объекты, которые впоследствии связываются с конкретными полями таблиц. В этом разделе будут рассмотрены правила как самостоятельные объекты базы данных. Для столбца таблицы можно определить только одно правило, но несколько ограничений целостности CHECK. Если для одного столбца определены ограничения целостности и правило, то будут учитываться как ограничения целостности, так и правило. Создание правила не может выполняться в одном пакете с другими командами Transact-SQL. Для создания правила используется следующая команда Transact-SQL CREATE RULE rule AS condition expression Рассмотрим аргументы команды.

О rule- имя правила. При выборе имени необходимо придерживаться общих правил именования объектов. При необходимости можно указать имя владельца. О condition expression - логическое выражение, определяющее условие, накладываемое на значения. В качестве условия можно использовать любые логические команды, арифметические операторы, встроенные функции и предикаты например IN, BETWEEN, LIKE . В выражении condition expression нельзя ссылаться на столбцы таблиц или на любые другие объекты базы данных.

Встроенные функции также не должны ссылаться на объекты базы данных. В выражении допустима одна локальная переменная, начинающаяся с символа. В качестве имени переменной можно использовать произвольную строку. При выполнении правила переменная будет содержать значение, которое пользователь пытается ввести в столбец с помощью команды INSERT или UPDATE. Переменная может использоваться в любых логических операциях.

Приведем пример создания правила CREATE RULE rule one AS val 100 AND ava1 170 CREATE RULE rule two AS Plist IN MATRIX . ACC , SIS , KIT Правило может быть создано только в текущей базе данных. Само по себе правило не выполняет контроля данных. Созданное правило необходимо связать со столбцом таблицы или пользовательским типом данных. Правило не может быть связано с системным типом данных и столбцами, имеющими типы данных timestamp, text и image.

При связывании правила со столбцом таблицы или пользовательским типом данных следует убедиться, что тип данных в правиле и в объекте привязки совпадают. Сервер не отслеживает соответствия типов данных при связывании. Ошибка выдается только тогда, когда пользователь изменяет значение и сервер начинает выполнение правила. Строго говоря, сервер вообще не выполняет проверки соответствия типов, он лишь констатирует ошибку при сравнении величин, имеющих несовместимый тип. Для связывания правила со столбцом таблицы или пользовательским типом данных используется хранимая процедура sp bindru1e со следующим синтаксисом sp b1ndrule ru1ename rule . objname objectjname . futureonly futureonlyjflag Назначение параметров процедуры sp bindrule соответствует назначению аналогичных параметров хранимой процедуры sp bindef ault, описанной в предыдущем разделе. Для отвязывания правила используется хранимая процедура sp unbindrule sp unb1ndrule objname object name . futureonly futureonly flag Для получения сведений о правиле имени владельца и даты создания используйте хранимую процедуру sp hel p с указанием в качестве аргумента имени правила sp he1p rule name Для получения текста кода Transact-SQL, определяющего правило, используйте хранимую процедуру sp helptext sp helptext rule name Для изменения имени правила используйте хранимую процедуру sp rename sp rename objname rule one newname rule two