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

Откуда:
Сообщений: 191
Подскажите как сюда добавить еще несколько функций? Допустим запрет на ввод бронирования позже даты смотра и т.д?

create TRIGGER 43 ON билет
after insert 
AS 
begin
declare @c datetime 
declare @b int
declare @a int
set @b = (select код_билета from inserted)
set @c =(select дата_просмотра from inserted)
set @a = datediff(hh, DATEPART(hh,@c), DATEPART(hh,Getdate()))
if @a < 3 
begin 
print ('До фильма осталось 3 часа')

   ROLLBACK TRANSACTION
END
end
GO
21 дек 16, 22:33    [20034313]     Ответить | Цитировать Сообщить модератору
 Re: Модификация  [new]
fantanol
Member

Откуда:
Сообщений: 191
что-то типа этого. только рабочий вариант)


declare @c datetime 
declare @b int
declare @a int
declare @d int
declare @f int
set @b = (select код_билета from inserted)
set @c =(select дата_просмотра from inserted)
set @d = (select дата_бронирования from inserted)
set @f =(select дата_возврата from inserted)
set @a = datediff(hh, DATEPART(hh,@c), DATEPART(hh,Getdate()))

if @a < 3 
begin 

print ('До фильма осталось 3 часа')
if @f > @d

begin 
print ('Дата возрата не может быть раньше даты бронирования')
   ROLLBACK TRANSACTION
END
end
GO
21 дек 16, 22:37    [20034326]     Ответить | Цитировать Сообщить модератору
 Re: Модификация  [new]
aleks2
Guest
Киномеханики зохавают MS SQL

if exists( select * from insertrd where дата_бронирования <= дата_просмотра ) begin 
  raiserror(N'запрет на ввод бронирования позже даты смотра', 16, 1);
  return; 
end;

if exists( select * from insertrd where datediff( hour, дата_бронирования, дата_просмотра ) < 4 ) begin 
  raiserror(N'До фильма осталось 3 часа', 16, 1);
  return; 
end;

if exists( select * from insertrd where дата_возврата < дата_бронирования ) begin 
  raiserror(N'Дата возрата не может быть раньше даты бронирования', 16, 1);
  return; 
end;


ЗЫ. Тока такие проверки делают простым CONSTRAINT, а не парят триггером отсутствующий мозг.
22 дек 16, 06:28    [20034953]     Ответить | Цитировать Сообщить модератору
 Re: Модификация  [new]
Владислав Колосов
Member

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

а что, констрейнты научились выдавать вменяемые сообщения, кроме "пущать не велено"?
22 дек 16, 10:58    [20035530]     Ответить | Цитировать Сообщить модератору
 Re: Модификация  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Владислав Колосов
aleks2,

а что, констрейнты научились выдавать вменяемые сообщения, кроме "пущать не велено"?

а нефиг баловать, сами пусть догадываются что до фильма 3 часа
22 дек 16, 11:00    [20035542]     Ответить | Цитировать Сообщить модератору
 Re: Модификация  [new]
aleks2
Guest
Владислав Колосов
aleks2,

а что, констрейнты научились выдавать вменяемые сообщения, кроме "пущать не велено"?


1. А чо клиент не могет разъяснить?
2. Могешь имя констрэйнта "русским языком" написать.
22 дек 16, 11:05    [20035562]     Ответить | Цитировать Сообщить модератору
 Re: Модификация  [new]
iljy
Member

Откуда:
Сообщений: 8711
Владислав Колосов,

у ограничений (как и у всех объектов) есть расширенные свойства, задаваемые функцией sys.sp_addextendedproperty, там можно хоть сочинение написать, уровень вменяемости сообщения ограничен только вашей фантазией.
22 дек 16, 13:11    [20036256]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить