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

Откуда:
Сообщений: 1389
задался я вопросом, что лучше использовать триггер или check ограничение.
Пользователям нужно установить запрет на изменение данных в записи таблицы accdocin, если в колонке status у этой записи указан 1 (статус - завершено). Если 0, то всё менять можно. И вот как бы что лучше для этого использовать: триггер или check ограничение?
12 фев 16, 14:40    [18809416]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37059
А что запретит пользователям менять дынные в записи вместе с полем status?
12 фев 16, 14:46    [18809477]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Glory
Member

Откуда:
Сообщений: 104760
RMagistr2015
что лучше использовать триггер или check ограничение.

Лучше для чего ?

RMagistr2015
Пользователям нужно установить запрет на изменение данных в записи таблицы accdocin

"Установить запрет" - это
- не показывать запись
- отменять все изменения(удаление - это изменение ?), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции
12 фев 16, 14:47    [18809481]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51244
RMagistr2015
И вот как бы что лучше для этого использовать: триггер или check ограничение?

Учитывая, что ограничением это сделать невозможно, вопрос несколько теряет смысл.
12 фев 16, 20:33    [18811137]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
vba-dev
Member

Откуда:
Сообщений: 36
RMagistr2015, вообще-то это надо делать на клиенте логикой клиентского ПО
13 фев 16, 01:58    [18812124]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Гавриленко Сергей Алексеевич
А что запретит пользователям менять дынные в записи вместе с полем status?


только правильно написанный триггер.
check тут вообще непонятно каким боком.
15 фев 16, 08:04    [18816243]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Multy
Member [заблокирован]

Откуда:
Сообщений: 420
Dimitry Sibiryakov
RMagistr2015
И вот как бы что лучше для этого использовать: триггер или check ограничение?

Учитывая, что ограничением это сделать невозможно, вопрос несколько теряет смысл.


Как это невозможно? Запросто :-)
Для каждого поля прописать:
ALTER TABLE [dbo].[accdocin]
WITH NOCHECK ADD CONSTRAINT [ck1] CHECK ([Field]<>case when [status]=(1) then [Field]  end)

Для статуса
ALTER TABLE [dbo].[accdocin]
WITH NOCHECK ADD CONSTRAINT [ck2] CHECK ([status]<>case when [status]<>(1) then [status]  end)
Только триггер всё равно понадобится на вставку отключать ограничение. В прочим Null можно вставлять.
16 фев 16, 04:18    [18821448]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
RMagistr2015
что лучше использовать триггер или check ограничение.

Лучше для чего ?

RMagistr2015
Пользователям нужно установить запрет на изменение данных в записи таблицы accdocin

"Установить запрет" - это
- не показывать запись
- отменять все изменения(удаление - это изменение ?), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции


Глория, ты реально крут, спасибо тебе за наводящие вопросы

- Лучше - это с точки зрения правильности решения подобных вопросов - скорости выполнения дальнейших операций с таблицей

- показывать запись
- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции

Сделал через триггеры
16 фев 16, 08:48    [18821689]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Glory
Member

Откуда:
Сообщений: 104760
RMagistr2015
- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции

Вы действительно не понимаете, что это противоположные действия ?
Как можно одновременно и отменить все изменения и игнорировать ошибочные записи ?
16 фев 16, 09:15    [18821783]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
RMagistr2015
- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции

Вы действительно не понимаете, что это противоположные действия ?
Как можно одновременно и отменить все изменения и игнорировать ошибочные записи ?


Не совсем понял как вот это
блок 1:
--Как можно одновременно и отменить все изменения и игнорировать ошибочные записи ?
относится к вот этому
блок 2:
- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции

объясните пожалуйста где в последнем (блок2) говорится об - отменить все изменения и игнорировать ошибочные записи
?
16 фев 16, 09:36    [18821893]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Glory
Member

Откуда:
Сообщений: 104760
RMagistr2015
объясните пожалуйста где в последнем (блок2) говорится об - отменить все изменения и игнорировать ошибочные записи
?

Вот тут

- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции
16 фев 16, 09:38    [18821902]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
RMagistr2015
- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции

Вы действительно не понимаете, что это противоположные действия ?
Как можно одновременно и отменить все изменения и игнорировать ошибочные записи ?


Что-то нащупываю в вашем замечании, но не уверен, то ли вы имели ввиду, не могли бы вы уточнить пожалуйста
16 фев 16, 09:38    [18821904]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
RMagistr2015
объясните пожалуйста где в последнем (блок2) говорится об - отменить все изменения и игнорировать ошибочные записи
?

Вот тут

- отменять все изменения(удаление - это изменение), если хотя бы одно изменение затрагивает эту запись
- игнорировать изменение этих записей, но разрешать изменения других записей в одной танзакции


Я понимаю, что вы пытаетесь донести до меня какую-то конкретную ситуацию, однако не могу понять, какую именно, подозреваю, что речь тут идёт о транзакциях, и если в этой транзакции придётся обрабатывать ошибочную запись...
Вы об этом? или меня в лес понесло?
16 фев 16, 09:43    [18821922]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Дано: Выполняется UPDATE, изменяющий 100 записей, из которых 3 записи имеют status=1
Вопрос: Что должно получится в результате этого UPDATE ?

Дано: Выполняется DELETE, удаляющий 100 записей, из которых 3 записи имеют status=1
Вопрос: Что должно получится в результате этого DELETE ?


Дано: Выполняется UPDATE, изменяющий 1 запись и одно поле status значением 0. Текущее значение поля status этой записи 1.
Вопрос: Что должно получится в результате этого UPDATE ?
16 фев 16, 10:08    [18822036]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
Дано: Выполняется UPDATE, изменяющий 100 записей, из которых 3 записи имеют status=1
Вопрос: Что должно получится в результате этого UPDATE ?

Дано: Выполняется DELETE, удаляющий 100 записей, из которых 3 записи имеют status=1
Вопрос: Что должно получится в результате этого DELETE ?


Дано: Выполняется UPDATE, изменяющий 1 запись и одно поле status значением 0. Текущее значение поля status этой записи 1.
Вопрос: Что должно получится в результате этого UPDATE ?


-- 97 записей изменяться, 3-и не изменяться
-- 97 удалиться, 3-и не удалиться
-- запись не должна изменяться
16 фев 16, 10:49    [18822273]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
vba-dev
RMagistr2015, вообще-то это надо делать на клиенте логикой клиентского ПО


Не получилось сделать триггер, делаю сейчас на клиентском ПО

НО не получилось у меня, а может можно всё таки сделать какой-нибудь триггер?
16 фев 16, 12:30    [18822868]     Ответить | Цитировать Сообщить модератору
 Re: что лучше использовать триггер или check ограничение?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
RMagistr2015
vba-dev
RMagistr2015, вообще-то это надо делать на клиенте логикой клиентского ПО


Не получилось сделать триггер, делаю сейчас на клиентском ПО

НО не получилось у меня, а может можно всё таки сделать какой-нибудь триггер?


конечно не получилось, пробовали наверное after? для ваших условий подойдет только insteadof
16 фев 16, 12:34    [18822900]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить