SQLRU.net - RDF-канал
type: channel
description: Разработка приложений баз данных
items: Проблема с триггером или с условием
items: Re: Проблема с триггером или с условием

Проблема с триггером или с условием
type: item
description: Короче. Проблема заключается в том что условие проверки расчета даты не работает. Оно просто игнорируется (я новичек в проектировании БД, по этому не бейте) В чем собственно проблема? Давайте покажу код триггера: Само условие где у меня проблема, я выделил жирным. Там где запрос, который проходит, игрорируя первое уловие, но проходя второе я выделил нижней чертой и смайликом CREATE TRIGGER UpdateSalary ON Рез_Преподаватели INSTEAD OF INSERT AS BEGIN DECLARE @Код_Преподавателя INT DECLARE @Ставка_Зарплаты INT DECLARE @Надбавка_к_Зарплате INT DECLARE @Код_кафедры INT DECLARE @Фамилия_Преподавателя VARCHAR(50) DECLARE @Должность VARCHAR(50) DECLARE @Научное_Звание VARCHAR(50) DECLARE @Дата_приема_на_работу DATE DECLARE @День_Рождения DATE DECLARE @Идентификационный_Код INT SELECT @Код_Преподавателя = i.Код_Преподавателя, @Ставка_Зарплаты = i.Ставка_Зарплаты, @Надбавка_к_Зарплате = i.Надбавка_к_Зарплате, @Код_кафедры = i.Код_кафедры, @Фамилия_Преподавателя = i.Фамилия_Преподавателя, @Должность = i.Должность, @Научное_Звание = i.Научное_Звание, @Дата_приема_на_работу = i.Дата_приема_на_работу, @День_Рождения = i.День_Рождения, @Идентификационный_Код = i.Идентификационный_Код FROM inserted i; BEGIN SET NOCOUNT ON; IF ((DATEDIFF(YEAR, @Дата_приема_на_работу, @День_Рождения)) >= 22 ) BEGIN INSERT INTO Рез_Преподаватели (Код_Преподавателя, Ставка_Зарплаты, Надбавка_к_Зарплате, Должность, Код_кафедры, Фамилия_Преподавателя, Научное_Звание, Дата_приема_на_работу, День_Рождения, Идентификационный_Код) VALUES (@Код_Преподавателя, @Ставка_Зарплаты, @Надбавка_к_Зарплате, @Должность, @Код_кафедры, @Фамилия_Преподавателя, @Научное_Звание, @Дата_приема_на_работу, @День_Рождения, @Идентификационный_Код); PRINT 'Разница в годах: ' + CAST(DATEDIFF(YEAR, @День_Рождения, @Дата_приема_на_работу) AS VARCHAR(20)); PRINT 'Разница в годах: ' + CAST(YEAR(@Дата_приема_на_работу) - YEAR(@День_Рождения) - CASE WHEN MONTH(@Дата_приема_на_работу) * 100 + DAY(@Дата_приема_на_работу) < MONTH(@День_Рож…
creator: LogDogz
date: 2024-01-22T13:09:25-00:00

Re: Проблема с триггером или с условием
type: item
description: Что здесь у тебя получается: DECLARE @Дата_приема_на_работу DATE DECLARE @День_Рождения DATE SET @Дата_приема_на_работу = '2004-10-10' SET @День_Рождения = '2000-03-10' Select DATEDIFF(YEAR, @Дата_приема_на_работу, @День_Рождения) Залогируй значения переменных @Дата_приема_на_работу, @День_Рождения в триггере. И тогда поймешь что не так.
creator: BlackEric
date: 2024-01-22T14:46:09-00:00

Re: Проблема с триггером или с условием
type: item
description: С моей точки зрения сам подход вешать бизнес-логику на триггер - неправильный. Если необходимо - пиши процедуру и вызывай ее программно либо в самой аппликации высчитывай все что необходимо и выполняй вставку записи с уже подсчитанными и проверенными данными. А насчет Цитата: К примеру в нем сбивается автоинкремент в таблицах Не пояснишь как это? Я с таким что-то не сталкивался.
creator: flexgen
date: 2024-01-31T10:45:33-00:00