Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Триггер. запрет на обновление. Подскажите.  [new]
Slip1992
Member

Откуда:
Сообщений: 6
Доброго времени суток!
Помогите, пожалуйста, разобраться. Имеются две таблицы: Сотрудники и Отделы
Требуется создать триггер, который при добавлении новых сотрудников будет выводить сообщение с ошибкой если сотрудник числится в отделе, в котором более 10 сотрудников. Т.е. запрет на обновление
Что получилось у меня:
CREATE TRIGGER TR0
ON Отделы
AFTER UPDATE AS
IF(SELECT Количество_сотрудников FROM inserted)>=10
BEGIN
PRINT'Вы не можете добавить сотрудника в данный отдел'
ROLLBACK 
END


К сообщению приложен файл. Размер - 49Kb
9 янв 13, 23:06    [13744184]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Slip1992
Member

Откуда:
Сообщений: 6
Но данный триггер будет срабатывать и когда удаляем (не будет давать удалять) какого-либо сотрудника из отдела где было более 10
9 янв 13, 23:06    [13744185]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Slip1992
Member

Откуда:
Сообщений: 6
триггер на обновление таблицы Отделы, когда осуществляется добавление/удаление сотрудников уже есть
9 янв 13, 23:10    [13744197]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
qwerty112
Guest
Slip1992
Но данный триггер будет срабатывать и когда удаляем (не будет давать удалять) какого-либо сотрудника из отдела где было более 10

"брэхня" (с)
9 янв 13, 23:19    [13744217]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
qwerty112
Guest
Slip1992
Доброго времени суток!
Помогите, пожалуйста, разобраться. Имеются две таблицы: Сотрудники и Отделы
Требуется создать триггер, который при добавлении новых сотрудников будет выводить сообщение с ошибкой если сотрудник числится в отделе, в котором более 10 сотрудников. Т.е. запрет на обновление
Что получилось у меня:
CREATE TRIGGER TR0
ON Отделы
AFTER UPDATE AS
IF(SELECT Количество_сотрудников FROM inserted)>=10
BEGIN
PRINT'Вы не можете добавить сотрудника в данный отдел'
ROLLBACK 
END

собственно, он (триггер) и "при добавлении" срабатывать не будет ...
9 янв 13, 23:21    [13744221]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
Добавляем сотрудников, а триггер почему-то на Отделы.
9 янв 13, 23:36    [13744258]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Slip1992
Member

Откуда:
Сообщений: 6
триггер срабатывает при обновлении таблицы Отделы,которая обновляется за счет другого триггера2 (как я уже писал выше) триггер2 сомюмтывает при добавлении или удалении данных из таблицы Сотрудники
Я не могу разбраться с триггером, который указан в теме
10 янв 13, 00:11    [13744330]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Slip1992,
может вам лучше пользоваться INSTEAD OF а не AFTER?!
10 янв 13, 00:20    [13744360]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
Slip1992
триггер срабатывает при обновлении таблицы Отделы,которая обновляется за счет другого триггера2 (как я уже писал выше) триггер2 сомюмтывает при добавлении или удалении данных из таблицы Сотрудники
Я не могу разбраться с триггером, который указан в теме
Вот какой-нибудь доброхот запретит для БД nested triggers и вся ваша цепочка триггеров накроется. Делайте проверку в триггере на таблицу Сотрудники.
10 янв 13, 00:48    [13744451]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
invm
Вот какой-нибудь доброхот запретит для БД nested triggers и вся ваша цепочка триггеров накроется. Делайте проверку в триггере на таблицу Сотрудники.

У вас что, все имеют административные права на изменения свойств бд?
10 янв 13, 06:56    [13744680]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
Ken@t
invm
Вот какой-нибудь доброхот запретит для БД nested triggers и вся ваша цепочка триггеров накроется. Делайте проверку в триггере на таблицу Сотрудники.

У вас что, все имеют административные права на изменения свойств бд?
Вам не доводилось участвовать в разборках с заказчиками на тему "Ваш кривой софт у нас не работает"? Рад за вас.
10 янв 13, 09:26    [13744937]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
invm
Ken@t
пропущено...

У вас что, все имеют административные права на изменения свойств бд?
Вам не доводилось участвовать в разборках с заказчиками на тему "Ваш кривой софт у нас не работает"? Рад за вас.

Изменение свойств БД - собственные риски эксплуатанта, если не указано иное. А вы выводы сделали из этих разборок ?
10 янв 13, 09:30    [13744962]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Slip1992
Member

Откуда:
Сообщений: 6
короче, мне просто нужно добавить в данный триггер, еще одно условие его выполнения: при добавлении записей в другую таблицу (Сотрудники)
я вот и не знаю, как сделать в триггере два условия
10 янв 13, 09:32    [13744975]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
Ken@t
Изменение свойств БД - собственные риски эксплуатанта, если не указано иное. А вы выводы сделали из этих разборок ?
Т.е. повышение "дуракоустойчивости" -- хрень, на которую не стоит тратить свое драгоценное время?
А какие выводы и из чего я их сделал, вас не касаются.
10 янв 13, 09:41    [13745037]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
Ken@t
invm
пропущено...
Вам не доводилось участвовать в разборках с заказчиками на тему "Ваш кривой софт у нас не работает"? Рад за вас.

Изменение свойств БД - собственные риски эксплуатанта, если не указано иное. А вы выводы сделали из этих разборок ?
Если вам платят деньги, а не вы, то по умолчанию в любой трабле виноваты вы, если вы убедительно не докажете иное (причём доказывать вы беднтн совсем не техническим специалистам).

Просто потому, что при неубедительности ваших оправданий заказчик просто перестаёт платить деньги, без всяких "презумпций невиновности".

Это даже не считая того, что писать качественные программы просто приятно :-)
10 янв 13, 09:46    [13745065]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
invm
Т.е. повышение "дуракоустойчивости" -- хрень, на которую не стоит тратить свое драгоценное время?

Я этого ни где не писал и не говорил.

invm
А какие выводы и из чего я их сделал, вас не касаются.

Не надо так эррегировать, это был риторический вопрос.
10 янв 13, 10:45    [13745442]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Slip1992
Member

Откуда:
Сообщений: 6
Slip1992
короче, мне просто нужно добавить в данный триггер, еще одно условие его выполнения: при добавлении записей в другую таблицу (Сотрудники)
я вот и не знаю, как сделать в триггере два условия

так и кто-нибудь случайно не подскажет мне решение моей проблемы?
10 янв 13, 10:54    [13745474]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Slip1992
Slip1992
короче, мне просто нужно добавить в данный триггер, еще одно условие его выполнения: при добавлении записей в другую таблицу (Сотрудники)
я вот и не знаю, как сделать в триггере два условия

так и кто-нибудь случайно не подскажет мне решение моей проблемы?

Так ответили же - триггер на таблицу сотрудники.
10 янв 13, 10:59    [13745510]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
Slip1992,

Сказали же уже!
Триггер на сотрудников с группировкой.
Только как такая ситуация:
В 1(одном) отделе было 5 (пять) сотрудников
Добавили ИНСЕРТОМ туда 7(сотрудников)
Как быть?
Всех семерых на кол?
Или каких-то "счастливчиков" все-таки добавить. Тогда условие лотереи - в студию!
10 янв 13, 11:19    [13745635]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
Slip1992
Slip1992
короче, мне просто нужно добавить в данный триггер, еще одно условие его выполнения: при добавлении записей в другую таблицу (Сотрудники)
я вот и не знаю, как сделать в триггере два условия

так и кто-нибудь случайно не подскажет мне решение моей проблемы?
Вы напишите триггер на русском языке, в виде некого "псевдокода", потом уже переводите это на T-SQL
Так для начала проще обучаться программированию, сейчас весь код выглядит абсурдным, даже нечего поправить.

Например, вы пишите
Создать триггер, срабатывающий при обновлении существующих записей
, и хотите, что бы он сработал при добавлении новых записей

Или:
ЕСЛИ (список из нескольких целых чисел) БОЛЬШЕ 10
Как может быть "список" больше 10, непонятно.
10 янв 13, 11:46    [13745854]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Slip1992
так и кто-нибудь случайно не подскажет мне решение моей проблемы?
Любые записи удаляйте только хранимой процедурой. Триггеры - зло.
ХП может провести сложные проверки и грамотно информировать пользователя о проблемах, а также выполнить удаление или обновление в логически связанных таблицах.
10 янв 13, 11:48    [13745865]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
LSV
Slip1992
так и кто-нибудь случайно не подскажет мне решение моей проблемы?
Любые записи удаляйте только хранимой процедурой. Триггеры - зло.
ХП может провести сложные проверки и грамотно информировать пользователя о проблемах, а также выполнить удаление или обновление в логически связанных таблицах.
Что из этого не может триггер?
Он, вообще-то, - частный случай процедуры.
10 янв 13, 11:56    [13745950]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
qwerty112
Guest
iap
LSV
пропущено...
Любые записи удаляйте только хранимой процедурой. Триггеры - зло.
ХП может провести сложные проверки и грамотно информировать пользователя о проблемах, а также выполнить удаление или обновление в логически связанных таблицах.
Что из этого не может триггер?
Он, вообще-то, - частный случай процедуры.

извините, и, сугубо имхо, конечно,
но эта фраза (выделил) звучит примерно как - "что НЕ может экскаватор, из того, что может мужик с лопатой ?"

даа, наверное - всё может, только зачем он (экскаватор) - если "мужик с лопатой" справляется ?
10 янв 13, 13:42    [13746757]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
qwerty112
iap
пропущено...
Что из этого не может триггер?
Он, вообще-то, - частный случай процедуры.

извините, и, сугубо имхо, конечно,
но эта фраза (выделил) звучит примерно как - "что НЕ может экскаватор, из того, что может мужик с лопатой ?"

даа, наверное - всё может, только зачем он (экскаватор) - если "мужик с лопатой" справляется ?
В данном случае таких мужиков может быть много. И справляться они могут по-разному.
В принципе их может и не быть вовсе - простые запросы INSERT, DELETE, UPDATE, MERGE никто не отменял.
А триггеры привязаны к таблице, вызываются при любых соответствующих обращениях к таблице (конечно, если их не отключили).
Являются узким "бутылочным горлышком", через которое происходят манипуляции с данными таблицы.
Поэтому именно в триггерах проще всего их контролировать и поддерживать.
10 янв 13, 13:50    [13746813]     Ответить | Цитировать Сообщить модератору
 Re: Триггер. запрет на обновление. Подскажите.  [new]
qwerty112
Guest
iap
qwerty112
пропущено...

извините, и, сугубо имхо, конечно,
но эта фраза (выделил) звучит примерно как - "что НЕ может экскаватор, из того, что может мужик с лопатой ?"

даа, наверное - всё может, только зачем он (экскаватор) - если "мужик с лопатой" справляется ?
В данном случае таких мужиков может быть много.

нет,
в данном, конкретном случае (задача ТС) - таких "мужиков" ровно 3-и
- приём нового сотрудника в штат
- вывод сотрудника из штата
- перевод сотрудника внутри штата
всё!

какого лешего ТСа "понесло в триггерА" - это и он сам, ответить врядли сможет,
только то, что задача наверняка учебная его и оправдует

я не спорю, есть ситуации, когда триггер значительно "упрощает" жизнь,
вот, если обратится к эпическому топику, я бы с удовольствием послушал, как ФФ...Ф предложил бы решать без триггера в этом случае
Megabyte
...
Но есть вещи, которые проще запихнуть в триггер(на всю БД в несколько сотен таблиц их не больше десятка).
Пример. Есть таблица проводок, к ней обращаются, модифицируют порядка 20ти ХП. Потребовалосось сбрасывать определенный флаг в таблице выгрузки при изменении проводок. Проще было написать единый код в триггере на изменение, добавление, нежели тот же самый код писать в 20 ХП. Банально как в ООП, единый код в одном месте, а не в 20ти...

даа, здесь триггер - "красссиво"
в задаче ТС - нет!
iap
В принципе их может и не быть вовсе - простые запросы INSERT, DELETE, UPDATE, MERGE никто не отменял.

всегда стараюсь "отменить" :)
iap
А триггеры привязаны к таблице, вызываются при любых соответствующих обращениях к таблице (конечно, если их не отключили).

вот-вот
и когда "надо" и когда "не надо"
iap
Являются узким "бутылочным горлышком", через которое происходят манипуляции с данными таблицы.
Поэтому именно в триггерах проще всего их контролировать и поддерживать.

иногда - "слишком узким"
опять же прийдётся сослатся на тот топик - 8556584
имхо, более чем "жизненная" ситуация описанна ...
10 янв 13, 14:28    [13747165]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить