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

Откуда:
Сообщений: 5
Есть триггер он не должен добавлять поставку если такой же номер поставки существует в другом контракте. Наверняка ошибка элементарная, но у меня не хватает опыта и мозга чтобы ее решить.
ALTER TRIGGER [dbo].[uniq_posatavka_for_contract] 
   ON  [dbo].[Поставка] 
   AFTER INSERT, UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	DECLARE @postavka_id_old int
	DECLARE @postavka_id_new int
	DECLARE @contract_id_postavka int
	DECLARE @contract_id_inserted int

	
	SELECT @contract_id_inserted = НомерКонтракта FROM inserted
	SELECT @contract_id_postavka = НомерКонтракта FROM Поставка 
	SELECT @postavka_id_old = КодПоставки FROM Поставка
	SELECT @postavka_id_new = КодПоставки FROM inserted

   IF @postavka_id_new = @postavka_id_old AND @contract_id_inserted != @contract_id_postavka
	   BEGIN
		   print 'Разные контракты не могут иметь одиноковые номера поставок1'
		   rollback
	   END
END
9 июн 14, 12:45    [16141686]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
И какая же ошибка?
9 июн 14, 12:45    [16141693]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Александр Студ
Наверняка ошибка элементарная

SELECT @contract_id_postavka = НомерКонтракта FROM Поставка
SELECT @postavka_id_old = КодПоставки FROM Поставка
вы хотите получить в переменной сулчайную запись из таблицы Поставка ?


Александр Студ
но у меня не хватает опыта и мозга чтобы ее решить.

Таблицы нужно сравнивать как таблицы
9 июн 14, 12:48    [16141711]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Александр Студ,

начните с выбрасывания из триггера всех скалярных переменных
9 июн 14, 12:59    [16141805]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Александр Студ
Member

Откуда:
Сообщений: 5
Гавриленко Сергей Алексеевич, этот триггер тупо не срабатывает.
9 июн 14, 13:02    [16141827]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1528
Александр Студ
Гавриленко Сергей Алексеевич, этот триггер тупо не срабатывает.
А еще он может остро не срабатывать? Почему он не срабатывает уже намекнули.
9 июн 14, 13:05    [16141843]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Александр Студ
этот триггер тупо не срабатывает.

А как вы проверяли, что он именно не срабатывает ?
9 июн 14, 13:06    [16141848]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Александр Студ
Гавриленко Сергей Алексеевич, этот триггер тупо не срабатывает.
Оно и понятно: только что добавленная строка уже лежит в таблице,
когда триггер только запускается.
Поэтому записи inserted равны тем, которые в таблице!

Это, однако, не относится к триггерам INSTEAD OF
9 июн 14, 13:06    [16141849]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Александр Студ, значения сверяются сами с собой, Вы сверяете новое с новым.
9 июн 14, 13:35    [16142110]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
aleks2
Guest
ALTER TRIGGER [dbo].[uniq_posatavka_for_contract] 
   ON  [dbo].[Поставка] 
   AFTER INSERT, UPDATE
AS 
BEGIN
   IF exists( select * 
               from inserted i inner join Поставка p on i.КодПоставки = p.КодПоставки and i.НомерКонтракта <> p.НомерКонтракта
             )
	   BEGIN
		   raiserror('Разные контракты не могут иметь одиноковые номера поставок1', 16, 1);
	   END;
END;
9 июн 14, 14:27    [16142627]     Ответить | Цитировать Сообщить модератору
 Re: Триггер элементарная ошибка  [new]
Александр Студ
Member

Откуда:
Сообщений: 5
aleks2,
Круть, работает, спасибо!
9 июн 14, 16:49    [16144025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить