|
триггер в ms sql сделать отказ | ☑ | ||
---|---|---|---|---|
0
DES
23.09.18
✎
23:51
|
как в триггере, который на инсерт, запретить делать инсерт текущей записи и как передать в триггер параметром поле текущей (создаваемой) записи?
|
|||
1
youalex
24.09.18
✎
04:05
|
что есть текущая запись?
а так -есть таблица inserted для отмены: ROLLBACK TRAN RAISERROR |
|||
2
scanduta
24.09.18
✎
09:12
|
а что мешает использовать триггер instead of insert
|
|||
3
rs_trade
24.09.18
✎
09:14
|
(0) напомню что триггер срабатывает не для записи, а для команды.
|
|||
4
DES
24.09.18
✎
09:32
|
(3) как понять для команды?
для каждого случая добавления, перед коммитом, вызывается триггер. Т.е. для каждой записи при ее добавлении!? |
|||
5
Cool_Profi
24.09.18
✎
09:34
|
(4) Нет. Если вставляется пачка данных, то вызывается триггер один раз. На всю пачку.
|
|||
6
DES
24.09.18
✎
09:42
|
(5) т.е. на 1 транзакцию ?
|
|||
7
Cool_Profi
24.09.18
✎
09:47
|
(6) На один оператор insert.
|
|||
8
scanduta
24.09.18
✎
09:53
|
(0) автор ты еще поясни что ты имеешь ввиду под:
"запретить делать инсерт текущей записи" |
|||
9
DES
24.09.18
✎
10:04
|
(7) а как еще делать отладку триггера, он в момент отладки не дает установить в нем точку останова, а выполняется как одна команда.
|
|||
10
DES
24.09.18
✎
10:05
|
(8) делаю инсерт, нужно проверить можно ли его делать.
т.е. если нельзя - то отказ в добавлении этой новой записи. |
|||
11
Cool_Profi
24.09.18
✎
10:05
|
(9) Отладочную печать изобрели ещё 50 лет назад...
|
|||
12
Cool_Profi
24.09.18
✎
10:06
|
(10) Перенос бизнес-логики на сервер хранения данных считается моветоном уже лет 20
|
|||
13
DES
24.09.18
✎
10:11
|
(12) а триггеры забыли исключить.
|
|||
14
Cool_Profi
24.09.18
✎
10:12
|
(13) Триггеры кошерно использовать для поддержания целостности ссылок.
|
|||
15
Ёпрст
24.09.18
✎
10:12
|
(10)
ну и воткни там if <условие> where insert table values('Вася','Лошпед') |
|||
16
scanduta
24.09.18
✎
10:38
|
(10) Вариантов много,
1)можно использовать CHECK constraint для таблицы вот пример CREATE TABLE [book_history] ( id int NOT NULL IDENTITY PRIMARY KEY, user_id int NOT NULL, library_id int NOT NULL, book_id int NOT NULL, borrow_time datetime DEFAULT GETDATE(), return_policy datetime DEFAULT DATEADD(DAY, 30, GETDATE()), return_time datetime, CHECK (dbo.fn_check_duplicate(user_id, library_id, book_id) = 1) ); Функция проверки: DROP FUNCTION IF EXISTS fn_check_duplicate GO CREATE FUNCTION fn_check_duplicate (@user_id int, @library_id int, @book_id int) RETURNS int BEGIN RETURN (SELECT COUNT(*) FROM [book_history] WHERE user_id = @user_id AND library_id = @library_id AND book_id = @book_id AND return_time IS NULL) END GO 2)Можнo использовать триггер instead of insert 3)Можно unique key сделать. |
|||
17
DES
24.09.18
✎
19:15
|
А почему в конструкторе запросов "Выполнить" неактивно?
http://prntscr.com/ky5r4d Вроде раньше можно было тестить сразу запрос, а теперь не дается. |
|||
18
youalex
24.09.18
✎
19:48
|
(17) соединение не протухло?
|
|||
19
Fram
24.09.18
✎
20:07
|
(17) а где там запрос?
|
|||
20
DES
24.09.18
✎
20:26
|
(18) нет сразу неактивно
(19) запрос есть, (и даже если синтаксис запроса из конструктора правильный - все равно панель не активна) |
|||
21
DES
25.09.18
✎
16:09
|
подскажите
как сделать ограничение на таблице с целью уникальности всей записи например 3 поля pole_id pole_1 pole_2 pole_id -это первичный ключ ка сделать чтобы невозможно было внести записи типа 1 1 1 2 2 2 3 2 2 - эту нельзя пропускать при инсерте или апдейте, так как повторяются поля pole_1 и pole_2 |
|||
22
DES
25.09.18
✎
17:53
|
А как можно сохранять запросы к базе с параметрами.
Типа представлений но с параметрами |
|||
23
youalex
25.09.18
✎
19:47
|
(22) хранимка что ли?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |