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

Откуда:
Сообщений: 191
Здравствуйте. Есть триггер который удаляет запись и сохраняет ее в другую таблицу.(из таблицы билет в таблицу архив)
Но если зайти в другую таблицу(допустим сеанс) и удалить там запись,то она каким-то образом затронет таблицу билет(там есть строка код_сеанса) удалит там запись и тем самым запустит триггер и запись окажется в таблице архив. Надеюсь понятно объяснил. Как сделать,чтобы он удалял только из таблицы билет и не трогал другие таблицы??
Понимаю,что он затрагивает любую строку из прописанных ниже во всех таблицах,но нужно как-то ограничиться только билетом.

CREATE TRIGGER [Del]
    ON [dbo].[Билет]
    FOR DELETE
    AS
    BEGIN
DECLARE @a INT 
SET @a = (SELECT код_билета FROM deleted)
DECLARE @b INT
SET @b = (SELECT серия FROM deleted)
DECLARE @c INT
SET @c = (SELECT место FROM deleted)
DECLARE @d INT
SET @d = (SELECT цена FROM deleted)
DECLARE @e INT
SET @e = (SELECT ряд FROM deleted)
DECLARE @f DATE
SET @f = (SELECT дата_продажи FROM deleted)
DECLARE @g DATE
SET @g = (SELECT дата_возврата FROM deleted)
DECLARE @h DATE
SET @h = (SELECT дата_бронирования FROM deleted)
DECLARE @i INT
SET @i = (SELECT код_фильма FROM deleted)
DECLARE @j INT
SET @j = (SELECT код_сеанса FROM deleted)
DECLARE @k datetime
SET @k = (SELECT дата_просмотра FROM deleted)
DECLARE @l INT
SET @l = (SELECT код_продавца FROM deleted)
IF (SELECT COUNT(*) FROM deleted ) >0
BEGIN
INSERT INTO Архив (код_билета,серия,место,цена,ряд,дата_продажи,дата_возврата,дата_бронирования,код_фильма,код_сеанса,дата_просмотра,код_продавца)
VALUES (@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l)
END
ELSE 
BEGIN 
print ('Перенос в архив не заверщен')
   ROLLBACK TRANSACTION
 
END
END
GO
23 дек 16, 23:09    [20043641]     Ответить | Цитировать Сообщить модератору
 Re: Некорректное удаление данных  [new]
кролик-зануда
Guest
+

о боже, как это развидеть и уснуть


fantanol,
а зачем вот это вот все?
просто
insert Архив
select перечень_полей FROM deleted

нельзя было сделать?

По теме, у вас наверняка настроен Foreign key с каскадным удалением.
ибо зачем билеты без сеанса

или еще один веселый триггер
24 дек 16, 01:22    [20043931]     Ответить | Цитировать Сообщить модератору
 Re: Некорректное удаление данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
fantanol
Есть триггер который удаляет запись и сохраняет ее в другую таблицу.(из таблицы билет в таблицу архив)
Вижу, что триггер переносит удаляемые записи в архив. Но при этом триггер ничего не удаляет.
Кстати, написан он неправильно, в архив будет переноситься не всё.
fantanol
Но если зайти в другую таблицу(допустим сеанс) и удалить там запись,то она каким-то образом затронет таблицу билет(там есть строка код_сеанса) удалит там запись и тем самым запустит триггер и запись окажется в таблице архив. Надеюсь понятно объяснил. Как сделать,чтобы он удалял только из таблицы билет и не трогал другие таблицы??
Непонятно.
Кто "он" трогает другие таблицы???
24 дек 16, 18:53    [20044857]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить