1 / 1 / 1
Регистрация: 20.01.2012
Сообщений: 22
1

Написать триггер срабатывающий при удалении

27.09.2012, 12:43. Показов 5474. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать триггер. Суть:
Есть две таблицы: пользователи, в которой есть колонка "GroupFlag", если там true, значит запись с таким ID является группой. И вторая таблица, пользователи-группы, соответственно две колонки: ID пользователя и ID группы, чтобы знать, в какой группе находится пользователь.
Триггер должен проверять, не является ли удаляемая группа пустой. То есть, мы удаляем запись из таблицы "Пользователи", если это группа, то запоминаем ID, смотрим таблице "Пользователи-группы" в колонке с группами и если он есть, выводим RAISERROR.
Как это сделать, подскажите?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2012, 12:43
Ответы с готовыми решениями:

Написать триггер для автоматического обновления поля при обновлении, удалении, добавлении записей в таблице
Добавить в таблицу «Продавцы» поле «Суммарный вес продаж» и написать триггер для автоматического...

Разработать триггер, запускаемый при удалении строки таблицы
Разработать триггер, запускаемый при удалении строки таблицы. Удаленная строка должна быть...

Триггер, срабатывающий на ставку и удаление данных (PL SQL)
суть триггера уровня строки есть таблица class в ней столбцы id_class и cnt_pupil (количество...

Реализовать триггер, обеспечивающий при удалении ограничение целостности
Здравствуйте,уважаемые! Никак не могу разобраться с триггером...уже весь интернет перерыл(...

11
73 / 73 / 10
Регистрация: 18.09.2012
Сообщений: 208
27.09.2012, 13:18 2
Код
ALTER TRIGGER [dbo].trigger1 
   ON  [dbo].t1 
   instead of delete
AS 
BEGIN
   SET NOCOUNT ON;

    declare @l int,
              @id int
  
    select @l = len(name), @id = id from deleted
    
    if @l > 2
      raiserror('ошибочка', 15, 1)
    else
     delete from t1 where id = @id
END
1
1 / 1 / 1
Регистрация: 20.01.2012
Сообщений: 22
27.09.2012, 13:23  [ТС] 3
ras254, спасибо, но что значит
SQL
1
len(name)
?
0
73 / 73 / 10
Регистрация: 18.09.2012
Сообщений: 208
27.09.2012, 13:29 4
длина строки.
я написал триггер не применительно к Вашей задаче, а просто показал суть.
Есть условие, если оно выполняется, то ошибка, иначе - удаление записи.
0
1 / 1 / 1
Регистрация: 20.01.2012
Сообщений: 22
27.09.2012, 13:44  [ТС] 5
ras254, суть понял, а вот длину чего надо взять не могу сообразить.
0
73 / 73 / 10
Регистрация: 18.09.2012
Сообщений: 208
27.09.2012, 13:47 6
В Вашей задаче не нужно никакую длину брать, длину я взял потому что... ну просто так на ум пришло. А у Вас надо проверить пустая группа или нет. Или вопрос как раз в том как проверить пустая группа или нет? Я то подумал, что проблема с созданием такого триггера...
0
1 / 1 / 1
Регистрация: 20.01.2012
Сообщений: 22
27.09.2012, 14:21  [ТС] 7
ras254, вот да, надо проверить именно это. Всё что я смог придумать, это
SQL
1
2
3
4
 DECLARE @Id INT
   SELECT @Id = Id FROM deleted WHERE GroupFlag = 1
   IF EXISTS (SELECT * FROM GroupsUsers WHERE IdGroup = @Id)
   RAISERROR ('Ошибка', 16, 1)
Хотя теперь, кажется работает, после того как поменял (как Вы написали) AFTER DELETE на INSTEAD OF DELETE.
Спасибо!
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,793
27.09.2012, 14:34 8
Цитата Сообщение от New_Omega Посмотреть сообщение
SELECT @Id = Id FROM deleted WHERE GroupFlag = 1
особенно доставляет. А если записей пачку удалят?
0
1 / 1 / 1
Регистрация: 20.01.2012
Сообщений: 22
27.09.2012, 14:37  [ТС] 9
pincet, запретим.
Но если предложите вариант, который бы корретно работал при удалении пачки, буду весьма благодарен.
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,793
27.09.2012, 14:51 10
как-то так, наверное
T-SQL
1
delete from t where exists (select * from t1 inner join t on t.id=t1.id)
1
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
28.09.2012, 16:42 11
Цитата Сообщение от pincet Посмотреть сообщение
как-то так, наверное
T-SQL
1
delete from t where exists (select * from t1 inner join t on t.id=t1.id)
И вычищаем всю таблицу.

Цитата Сообщение от New_Omega Посмотреть сообщение
Как это сделать, подскажите?
Таки внешние ключи, не?
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,793
28.09.2012, 18:28 12
Цитата Сообщение от Humanitis Посмотреть сообщение
И вычищаем всю таблицу.
Пустые останутся.
0
28.09.2012, 18:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2012, 18:28
Помогаю со студенческими работами здесь

Django-сигнал / Sqlite-триггер при удалении пользователя
Здравствуйте! Помогите с созданием сабжа. На сайте есть комментарии. Соответственно, используется...

Триггер для SQLite который срабатывает при удалении записи
Здравствуйте! Подскажите пожалуйста, есть таблица resight в которой при удалении строки...

Триггер: при удалении пациента проверять, выписался ли пациент. Если пациент не выписан, удалять его нельзя
День добрый, нужна помощь, только начинаю изучать бд и возник вопрос про триггер. Нужно написать...

Скрипт, срабатывающий при открытии Блокнота
Добрый день ! Как сделать такой скрипт который будет запускатся при запуске Notepad ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru