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

Откуда:
Сообщений: 31
Всем добрый вечер. Создан триггер на удаление записей про авторов, книг которых не осталось в библ. Есть две книги с кол-вом "0", после отработки триггер пишет - Выполнение команд успешно завершено. А книги и автор не удаляются.. Можете подсказать что не так.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
create TRIGGER Del_trig
ON dbo.Books
instead of DELETE
AS
delete from dbo.Books_Authors where Book_Kod in(select kod from deleted)
delete from dbo.Books_Readers where Book_Kod in(select kod from deleted)
delete from dbo.books where Kod in(select kod from deleted)
delete from dbo.Authors where Kod not in(select Author_Kod from dbo.Books_Authors)
10 ноя 15, 22:59    [18397525]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
laferro
Есть две книги с кол-вом "0"

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

Сообщение было отредактировано: 11 ноя 15, 00:34
11 ноя 15, 00:32    [18397718]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Владислав Колосов
Member

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

сделайте каскадное удаление для внешних ключей и не пишите такого.
11 ноя 15, 10:50    [18398768]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
aleks2
Guest
Оне ж там фсе удалят
create TRIGGER Del_trig 
ON dbo.Books
for DELETE
AS 
  
  delete ba
     from dbo.Books_Authors as ba inner join deleted as d on ba.Book_Kod = d.Book_Kod;

  delete br
     from dbo.Books_Readers as br inner join deleted as d on ba.Book_Kod = d.Book_Kod;

  delete a
     from dbo.Authors as a inner join deleted as d on a.Author_Kod = d.Author_Kod
     where not exists( select * from dbo.Books_Authors where Author_Kod = d.Author_Kod);
11 ноя 15, 12:52    [18399445]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
**Есть две книги с кол-вом "0" -- это, простите, какая команда?

Это не команда - в таблице Books есть столбец "Count" - с двумя книгами, колв-во которых = 0. Они, по задумке, должны удалиться.


**после отработки триггер пишет - Выполнение команд успешно завершено
**В вашем триггере нет ни одной команды, которая может что-то "написать".

Не команда пишет, а в окне "Сообщение" SQL Server 2012. Т.е. триггер выполняется.
11 ноя 15, 18:59    [18402239]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
aleks2,
есть необходимость использовать INSTEAD OF DELETE, т.к. надо cоздать триггер который будет удалять записи об авторах, книг которых не осталось в библиотеке. Проверить корректность работы триггера при одновременном удалении нескольких книг с базы.
11 ноя 15, 19:22    [18402321]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
laferro
**Есть две книги с кол-вом "0" -- это, простите, какая команда?

Это не команда - в таблице Books есть столбец "Count" - с двумя книгами, колв-во которых = 0. Они, по задумке, должны удалиться.
Триггер работает не по задумке, а при выполнении определнной команды. Вот про эту команду я и спрашиваю.
11 ноя 15, 19:30    [18402353]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
Гавриленко Сергей Алексеевич,
скорее всего команда удаления книг до состояния их колличества "ноль". Только её нет.. Если в запросе её создать - тогда сработает триггер?
11 ноя 15, 19:43    [18402387]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Glory
Member

Откуда:
Сообщений: 104751
laferro
скорее всего команда удаления книг до состояния их колличества "ноль".

Команда удаления удаляет запись целиком.
А команда изменения значения в поле ничего не удаляет.

laferro
Если в запросе её создать - тогда сработает триггер?

Вы точно понимаете, что такое триггер ?
11 ноя 15, 19:51    [18402407]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
Glory,
прощу прощения, я только начинаю изучать SQL, знаю что триггер срабатывает при изменении данных в таблице. Изменение данных в таблице методом "Изменить первые 200 строк.." не привело к срабатыванию триггера. Подскажите - как правильно сделать?
11 ноя 15, 19:59    [18402437]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Glory
Member

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

Неправильно.
Триггер срабатывает для события.
Какого именно события - вы задаете в команде создания триггера.


laferro
Изменение данных в таблице методом "Изменить первые 200 строк.." не привело к срабатыванию триггера

Название некого метода в какой то клиентской программе ничего не говорит о том, какая команда передается серверу. И является ли эта команда именно тем событием, для которого вы создали триггерр

laferro
Подскажите - как правильно сделать?

Читать хелп для начала. Чтобы понимать, как это работает без написания кода.
11 ноя 15, 20:06    [18402472]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
Glory,
сколько help-а на msdn перечитано. Теория это общее понятие, для меня на практике понятней. Подскажите, что именно почитать чтобы триггер с аргументом instead of DELETE сработал? Как правильно "возникнуть" событие на сервере базы данных?
11 ноя 15, 20:46    [18402673]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
laferro
Glory,
сколько help-а на msdn перечитано. Теория это общее понятие, для меня на практике понятней. Подскажите, что именно почитать чтобы триггер с аргументом instead of DELETE сработал? Как правильно "возникнуть" событие на сервере базы данных?
Как ни странно, написать команду DELETE.
11 ноя 15, 20:48    [18402682]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
Glory,
может быть Вы знаете литературу с примерами? Чтоб пошагово было описано? Или такой нет в природе..
11 ноя 15, 20:48    [18402685]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
Гавриленко Сергей Алексеевич
laferro
Glory,
сколько help-а на msdn перечитано. Теория это общее понятие, для меня на практике понятней. Подскажите, что именно почитать чтобы триггер с аргументом instead of DELETE сработал? Как правильно "возникнуть" событие на сервере базы данных?
Как ни странно, написать команду DELETE.


Стесняюсь спросить - в каком месте её писать? Отдельной процедурой? В теле триггера? Просто запросом?
11 ноя 15, 20:51    [18402697]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
laferro
Glory,
сколько help-а на msdn перечитано. Теория это общее понятие, для меня на практике понятней. Подскажите, что именно почитать чтобы триггер с аргументом instead of DELETE сработал? Как правильно "возникнуть" событие на сервере базы данных?
https://msdn.microsoft.com/ru-ru/library/ms189799(v=sql.100).aspx
11 ноя 15, 20:52    [18402699]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
iap,
спасибо )
11 ноя 15, 20:55    [18402712]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
aleks2
Guest
laferro
aleks2,
есть необходимость использовать INSTEAD OF DELETE, т.к. надо cоздать триггер который будет удалять записи об авторах, книг которых не осталось в библиотеке. Проверить корректность работы триггера при одновременном удалении нескольких книг с базы.

Поциент, вы бредите.
12 ноя 15, 05:46    [18403820]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
aleks2
laferro
aleks2,
есть необходимость использовать INSTEAD OF DELETE, т.к. надо cоздать триггер который будет удалять записи об авторах, книг которых не осталось в библиотеке. Проверить корректность работы триггера при одновременном удалении нескольких книг с базы.

Поциент, вы бредите.


Извините, при выполнении Вашего кода триггера, в окне сообщений выдает ошибки - Недопустимое имя столбца "Book_Kod". Недопустимое имя столбца "Author_Kod".
А приведенный код работал на другой базе без вопросов, а на вновь созданной - никак. Все таблицы созданы заново, и Select-ы работают исправно. Может что-то с таблицами не верно.
12 ноя 15, 09:09    [18404117]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
Glory
laferro
Изменение данных в таблице методом "Изменить первые 200 строк.." не привело к срабатыванию триггера

Название некого метода в какой то клиентской программе ничего не говорит о том, какая команда передается серверу. И является ли эта команда именно тем событием, для которого вы создали триггерр
Прям таки Вы не знаете, что это пункт контекстного меню в SQL Server Management Studio и для чего он? :)
12 ноя 15, 09:13    [18404141]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Glory
Member

Откуда:
Сообщений: 104751
laferro
А приведенный код работал на другой базе без вопросов, а на вновь созданной - никак. Все таблицы созданы заново, и Select-ы работают исправно. Может что-то с таблицами не верно.

А как вы узнали, что этот код "работал на другой базе" ?

skyANA
Прям таки Вы не знаете, что это пункт контекстного меню в SQL Server Management Studio и для чего он? :)

Вы хотите устроить викторину на лучшего знатока SQL Server Management Studio ?
Или вы так пытаетесь доказать, что этот пункт меню вызывает событие для срабатывания вашего триггера ?
12 ноя 15, 09:35    [18404199]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
aleks2
Guest
laferro
aleks2
пропущено...

Поциент, вы бредите.


Извините, при выполнении Вашего кода триггера, в окне сообщений выдает ошибки - Недопустимое имя столбца "Book_Kod". Недопустимое имя столбца "Author_Kod".
А приведенный код работал на другой базе без вопросов, а на вновь созданной - никак. Все таблицы созданы заново, и Select-ы работают исправно. Может что-то с таблицами не верно.


Бред продолжался.
Я, что ле, должен выяснять как у тя столбцы зовут?
12 ноя 15, 10:51    [18404648]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
laferro
Member

Откуда:
Сообщений: 31
[quot Glory]
laferro
А приведенный код работал на другой базе без вопросов, а на вновь созданной - никак. Все таблицы созданы заново, и Select-ы работают исправно. Может что-то с таблицами не верно.

А как вы узнали, что этот код "работал на другой базе" ?


Glory - огромное спасибо )
Вы своими вопросами натолкнули меня на правильный ход мысли)

Всех остальных тоже благодарю.

Ответ нашла сама - он прост - создать запрос и в нём прописать единственную строку на удаление записи с кол-вом книг равным нулю
Выглядит так ) delete from books where count=0
И триггер сработал ) Ура ) неделю не могла спать из-за этого плёвого вопроса )

P.S. Есть мнение, что у программистов "немного задран нос"..
Слава богу что не у всех )
15 ноя 15, 01:10    [18419036]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
laferro
Ответ нашла сама - он прост - создать запрос и в нём прописать единственную строку на удаление записи с кол-вом книг равным нулю
Выглядит так ) delete from books where count=0
И триггер сработал ) Ура ) неделю не могла спать из-за этого плёвого вопроса )
Так какой триггер-то сработал?
Ваш, исходный?
Вам уже говорили, что он написал неправильно.
Он удаляет все записи из таблицы при удалении хотя бы одной записи из таблицы.
15 ноя 15, 09:32    [18419432]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на удаление.  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
alexeyvg
laferro
Ответ нашла сама - он прост - создать запрос и в нём прописать единственную строку на удаление записи с кол-вом книг равным нулю
Выглядит так ) delete from books where count=0
И триггер сработал ) Ура ) неделю не могла спать из-за этого плёвого вопроса )
Так какой триггер-то сработал?
Ваш, исходный?
Вам уже говорили, что он написал неправильно.
Он удаляет все записи из таблицы при удалении хотя бы одной записи из таблицы.


нормально, туда же подмножеством попали и те, которые нужно было удалить, кроме того, следующие триггеры будут срабатывать быстро
15 ноя 15, 11:39    [18419555]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить