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

Откуда:
Сообщений: 286
Добрый вечер!
Очень нужна помощь, при удалении записи из таблицы Master, СУБД(MS SQL SERVER 2000) выдает ошибку(см.рис). Сделал триггер, но ничего не изменилось
CREATE TRIGGER del_mas
ON Master
For DELETE
AS
IF (SELECT COUNT (*) FROM Zakaz z, DELETED d WHERE z.Tabel_nomer=D.Tabel_nomer)>0
BEGIN
ROLLBACK TRAN
PRINT 'Удалить невозможно: имеются заказы'
END


К сообщению приложен файл. Размер - 23Kb
17 май 13, 18:53    [14313785]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Гость333
Member

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

Вопрос задать забыли.
17 май 13, 18:57    [14313799]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Констрейнт проверяется до выполнения триггера.
17 май 13, 19:01    [14313813]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Vadim33,

Сначала проверяются FK, а потом только триггер запускается.
17 май 13, 19:03    [14313824]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

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

извините. я оч плохо разбираюсь в sql. Как мне исправить ошибку?
17 май 13, 19:09    [14313838]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Vadim33
Mind,

извините. я оч плохо разбираюсь в sql. Как мне исправить ошибку?
Не удалять записи, которые нарушают FK.
17 май 13, 19:10    [14313846]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Гавриленко Сергей Алексеевич, а если это необходимо? И почему уведомления не было от триггера?
17 май 13, 19:13    [14313853]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Vadim33
Гавриленко Сергей Алексеевич, а если это необходимо?
Тогда удалить сначала все записи из связанных таблиц, которые мешают удалению.
Vadim33
И почему уведомления не было от триггера?
Вы ответы принципиально не читаете?

Сообщение было отредактировано: 17 май 13, 19:18
17 май 13, 19:18    [14313885]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Гавриленко Сергей Алексеевич, что такое FK?
А как можно создать триггер INSERT для этой табл Master (Tabel_nomer,FIO_mastera,Adres,INN,Nom_strax_svid,Data_roj)?
17 май 13, 19:28    [14313926]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Гавриленко Сергей Алексеевич,
CREATE TRIGGER name_m ON dbo.Mebel
FOR INSERT 
AS
 IF EXISTS (SELECT *
            FROM Master
            WHERE FIO_master is NULL)
  BEGIN 
   PRINT 'ОШИБКА, вы должны заполнить поле ФИО'
   ROLLBACK TRANSACTION
  END

Будет ли работать?
17 май 13, 19:34    [14313950]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Vadim33,

работать будет, но какой в этом смысл?
Почему вставка в таблицу Mebel должна зависеть
от наличия в другой таблице Master записи с FIO_master is NULL?
17 май 13, 21:40    [14314275]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
iap,
мне просто необходимо что бы был хотя бы 1 триггер. Подскажите, пожалуйста, где можно и действительно можно использовать триггер тут?
17 май 13, 22:57    [14314587]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
действительно нужно*
17 май 13, 22:58    [14314594]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vadim33
мне просто необходимо что бы был хотя бы 1 триггер. Подскажите, пожалуйста, где можно и действительно можно использовать триггер тут?

Тогда стоит поднять уровень знаний с "я оч плохо разбираюсь в sql" до "я неплохо разбираюсь в sql"
17 май 13, 23:20    [14314718]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,
я понимаю, но времени нет к сожалению
17 май 13, 23:30    [14314749]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vadim33
я понимаю, но времени нет к сожалению

Это только в фильме "Матрица" вам могут за пару минут вложить в голову все знания по sql
А в реальной жизни время поиска ответ на вопрос "где можно и действительно нужно использовать триггер" напрямую зависит от уровня знаний.
Если вы ничего не знаете про триггера, то не надо их использовать. Все равно получится плохо.
17 май 13, 23:34    [14314767]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Vadim33,

Пользуйте триггер замещения - instead of я не знаю какой первичный ключ у таблицы Master из кода этого не видно, если, предположен поле ID является первичным ключем... триггер можно как то так написать.

CREATE TRIGGER del_mas
ON [Master]
instead of
AS
IF exists (SELECT COUNT (*) FROM Zakaz z, DELETED d WHERE z.Tabel_nomer=D.Tabel_nomer)
BEGIN
ROLLBACK TRAN
PRINT 'Удалить невозможно: имеются заказы'
END
else
  delete from [Master] where ID in (select ID from deleted)
18 май 13, 12:24    [14315843]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Извиняюсь - ошибка в условии - пропустил.

CREATE TRIGGER del_mas
ON [Master]
instead of
AS
IF exists (SELECT * FROM Zakaz z, DELETED d WHERE z.Tabel_nomer=D.Tabel_nomer)
BEGIN
ROLLBACK TRAN
PRINT 'Удалить невозможно: имеются заказы'
END
else
  delete from [Master] where ID in (select ID from deleted)
18 май 13, 12:26    [14315849]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Алексей Куренков,
спасибо большое. первичный ключом является Tabel_nomer.
18 май 13, 13:43    [14316126]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory
Если вы ничего не знаете про триггера, то не надо их использовать. Все равно получится плохо.

я бы с удовольствием не использовал их, но это условие поставленной задачи, что бы были триггера и хранимые процедуры
18 май 13, 13:44    [14316127]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Glory
Member

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

Так сообщите постановщику, что ваша квалификация недостаточна для этой задачи.
18 май 13, 13:47    [14316136]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

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

увы. но нельзя так сделать. поэтому мне необходим как минимум один триггер
18 май 13, 14:37    [14316243]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Glory,
Вы бы не могли мне помочь с триггерами?
18 май 13, 21:18    [14317276]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Vadim33
Member

Откуда:
Сообщений: 286
Алексей Куренков,
Ввел Ваш код
CREATE TRIGGER del_mas
ON [Master]
instead of
AS
IF   EXISTS (SELECT * FROM Zakaz z, DELETED d WHERE z.Tabel_nomer=D.Tabel_nomer)
BEGIN
ROLLBACK TRAN
PRINT 'Удалить невозможно: имеются заказы'
END
else
  delete from [Master] where Tabel_nomer in (select Tabel_nomer from deleted)

почему то пишет ошибку Server: Msg 156, Level 15, State 1, Procedure del_mas, Line 4
Incorrect syntax near the keyword 'AS'.
18 май 13, 23:31    [14317794]     Ответить | Цитировать Сообщить модератору
 Re: удаление и триггер  [new]
Гость333
Member

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

instead of delete
19 май 13, 04:00    [14318107]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить