Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сделать ограничение на изменяемую запись?  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Как сделать ограничение на изменяемую запись?
Пример.
Есть таблица договоров, у которой куча подчиненных таблиц.
В этих подчиненных табах задаем ограничение, которое проверяет состояние договора.
Если в таб.договора специальное поле имеет неактуальный статус, то ограничения подчиненных таблиц знают об этом и не дают менять содержимое подчиненных.
Но. Как сделать, чтобы ограничение самой таблицы договора позволяло менять только это статусное поле, а остальные поля этой записи в таблице запрещало ?
Т.е., если договор неактуальный, его поля менять нельзя, кроме одного статусного, которое говорит о неактуальности. Поменяв его на актуальное состояние, получаем доступ к изменению остальных полей.
Придумались обходные пути:
- Непосредственно в серв.процедуре которая редактирует договор, где можно будет менять только одно поле - статуса записи. После сохранения, если статус станет актуальным, то можно менять остальные поля.
- Либо, проверкой в ограничении состояния изменяемого поля статуса и сравнение его с историей перед изменением,например с @@глобальн.переменной, где хранится предыдущее состояние, что при многопольз. режиме работы может быть сомнительным, да и сам способ не очень.

Как это сделать в ограничении меняемой записи, в принципе это возможно ? Вот в чем вопрос
9 апр 12, 11:36    [12386469]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать ограничение на изменяемую запись?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Виктор_sql,

триггером
9 апр 12, 11:54    [12386584]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать ограничение на изменяемую запись?  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
iljy,

триггер та же процедура к сожалению
9 апр 12, 12:05    [12386666]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать ограничение на изменяемую запись?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Виктор_sql
iljy,

триггер та же процедура к сожалению


да, и любой выполняемый запрос тоже можно назвать процедурой.

а это что - " @@глобальн.переменной" ?
9 апр 12, 12:20    [12386766]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать ограничение на изменяемую запись?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
А можно более внятно.

Как я понимаю дело в множественном изменении, т.е. меняются несколько таблиц и поэтому триннера типа не подходят - Нет данных о предыдущем состоянии связанной таблицы?

Иначе в триггере проверка очень топорна до безобразия:
IF Exists(SELECT * FROM Inserted WHERE Status != 'ACTUAL') BEGIN ... RAISERROR() ...
9 апр 12, 12:26    [12386811]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать ограничение на изменяемую запись?  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
увы, как я понял, все к триггеру идет, чего не очень хотелось
хорошо, спасибо за ответы
11 апр 12, 09:51    [12397233]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать ограничение на изменяемую запись?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Виктор_sql
увы, как я понял, все к триггеру идет
Если вы про CONSTRAINT-ы, то они контролируют данные/состояния/форматы, а не их изменения.
Обыкновеная Физика природы (ссори за тавтологию).
11 апр 12, 12:56    [12398673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить