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

Откуда:
Сообщений: 52
есть таблица raport:
id_raport numeric(18, 0)
nomer float
dt date
триггер должен проверять столбец dt и nomer, если строка с такими записями есть то запрос не выполнять, так не получается:
use [123]
go
CREATE TRIGGER ss
   ON  raport
   FOR INSERT AS 
DECLARE @dt date
SELECT @dt = dt FROM inserted
IF EXISTS(SELECT dt FROM raport WHERE dt = @dt GROUP BY dt HAVING COUNT(dt ) > 1)
ROLLBACK tran

подскажите пожалуйста.
21 авг 14, 16:54    [16475511]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37138
serhio88
триггер должен проверять столбец dt и nomer, если строка с такими записями есть то запрос не выполнять

Для таких вещей придумали unique constraint.
21 авг 14, 16:55    [16475520]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
serhio88
Member

Откуда:
Сообщений: 52
Гавриленко Сергей Алексеевич,

но мне надо запретить добавлять строку если в этот день и этим пользователем это уже сделалось, т.е по двум признакам.
21 авг 14, 16:58    [16475538]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
Glory
Member

Откуда:
Сообщений: 104760
serhio88
но мне надо запретить добавлять строку если в этот день и этим пользователем это уже сделалось, т.е по двум признакам.

1. unique constraint можно делать по многим полям
2. при срабатывании after триггера добавленные записи уже находятся в таблицы и попадают под вашу проверку
21 авг 14, 17:02    [16475567]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Glory
serhio88
но мне надо запретить добавлять строку если в этот день и этим пользователем это уже сделалось, т.е по двум признакам.

1. unique constraint можно делать по многим полям
2. при срабатывании after триггера добавленные записи уже находятся в таблицы и попадают под вашу проверку
3. В inserted может лежать миллион записей, а не одна!
21 авг 14, 17:08    [16475598]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
serhio88
Member

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

дайте пожалуйста пример как это делается.
21 авг 14, 17:11    [16475618]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
xenix
Guest
CREATE UNIQUE INDEX IDX_UQNomerDate ON dbo.RAPORT(nomer,dt)

Кстати, nomer типа float - это шутка?
21 авг 14, 17:14    [16475644]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
serhio88
Member

Откуда:
Сообщений: 52
xenix
CREATE UNIQUE INDEX IDX_UQNomerDate ON dbo.RAPORT(nomer,dt)

Кстати, nomer типа float - это шутка?

да ))
спасибо всё получилось
21 авг 14, 17:20    [16475690]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
Glory
Member

Откуда:
Сообщений: 104760
serhio88
Glory,

дайте пожалуйста пример как это делается.

Так же, как и для одного поля. Только для двух, трех, ... полей
21 авг 14, 17:22    [16475709]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с триггером.  [new]
serhio88
Member

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

ещё раз всем спасибо за помощь.
21 авг 14, 17:34    [16475797]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить