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

Откуда:
Сообщений: 296
Помогите с триггером. Надо запретить запись в таблицу записей, которые повторяются ранее, чем 60 секунд после последней.
Пробовал так:
BEGIN
SET NOCOUNT ON;
IF (select count(*) from table where datediff(second, data, getdate()) < 60) > 0
ROLLBACK;
END

Но не работает
______________________________________
Вот ведь! ...
21 сен 13, 12:47    [14867039]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK  [new]
qwerty112
Guest
ram,

если триггер афтер, то вставляемые записи "уже какбэ есть" в таблице

зы
автор
(select count(*) from table where datediff(second, data, getdate()) < 60) > 0

проверка - натуральный "й.стыд" !
что такое exists знаешь ?
а лучше - top 1 ... order by data и индекс по data
21 сен 13, 13:00    [14867066]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK  [new]
ram
Member [скрыт]

Откуда:
Сообщений: 296
Примерчик бы.
21 сен 13, 14:19    [14867219]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK  [new]
aleks2
Guest
BEGIN
SET NOCOUNT ON;
IF exists(select * from inserted i where i.data <= dateadd( second, 60, (select max(data) from table) ) ) 
  ROLLBACK; 
END
21 сен 13, 14:46    [14867238]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK  [new]
ram
Member [скрыт]

Откуда:
Сообщений: 296
aleks2
BEGIN
SET NOCOUNT ON;
IF exists(select * from inserted i where i.data <= dateadd( second, 60, (select max(data) from table) ) ) 
  ROLLBACK; 
END

Не работает т.к. триггер AFTER
21 сен 13, 15:23    [14867279]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK  [new]
qwerty112
Guest
ram
aleks2
BEGIN
SET NOCOUNT ON;
IF exists(select * from inserted i where i.data <= dateadd( second, 60, (select max(data) from table) ) ) 
  ROLLBACK; 
END

Не работает т.к. триггер AFTER

так переделай на Инстиад Оф

или так
IF exists(select * from inserted i where i.data <= dateadd( second, 60, (select max(table.data) from table left join inserted i on table.id=i.id where i.id is null) ) ) 
  ROLLBACK; 
21 сен 13, 17:28    [14867481]     Ответить | Цитировать Сообщить модератору
 Re: ROLLBACK  [new]
ram
Member [скрыт]

Откуда:
Сообщений: 296
qwerty112,
Спасибо
21 сен 13, 17:43    [14867509]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить