Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

триггер в ms sql сделать отказ

триггер в ms sql сделать отказ
Я
   DES
 
23.09.18 - 23:51
как в триггере, который на инсерт, запретить делать инсерт текущей записи и как передать в триггер параметром поле текущей (создаваемой) записи?
 
 
   youalex
 
1 - 24.09.18 - 04:05
что есть текущая запись?
а так -есть таблица inserted

для отмены:
ROLLBACK TRAN
RAISERROR
   scanduta
 
2 - 24.09.18 - 09:12
а что мешает использовать триггер instead of insert
   rs_trade
 
3 - 24.09.18 - 09:14
(0) напомню что триггер срабатывает не для записи, а для команды.
   DES
 
4 - 24.09.18 - 09:32
(3) как понять для команды?
для каждого случая добавления, перед коммитом, вызывается триггер. Т.е. для каждой записи при ее добавлении!?
   Cool_Profi
 
5 - 24.09.18 - 09:34
(4) Нет. Если вставляется пачка данных, то вызывается триггер один раз. На всю пачку.
   DES
 
6 - 24.09.18 - 09:42
(5) т.е. на 1 транзакцию ?
   Cool_Profi
 
7 - 24.09.18 - 09:47
(6) На один оператор insert.
   scanduta
 
8 - 24.09.18 - 09:53
(0) автор ты еще поясни что ты имеешь ввиду под:
"запретить делать инсерт текущей записи"
   DES
 
9 - 24.09.18 - 10:04
(7) а как еще делать отладку триггера, он в момент отладки не дает установить в нем точку останова, а выполняется как одна команда.
   DES
 
10 - 24.09.18 - 10:05
(8) делаю инсерт, нужно проверить можно ли его делать.
т.е. если нельзя - то отказ в добавлении этой новой записи.
 
 Рекламное место пустует
   Cool_Profi
 
11 - 24.09.18 - 10:05
(9) Отладочную печать изобрели ещё 50 лет назад...
   Cool_Profi
 
12 - 24.09.18 - 10:06
(10) Перенос бизнес-логики на сервер хранения данных считается моветоном уже лет 20
   DES
 
13 - 24.09.18 - 10:11
(12) а триггеры забыли исключить.
   Cool_Profi
 
14 - 24.09.18 - 10:12
(13) Триггеры кошерно использовать для поддержания целостности ссылок.
   Ёпрст
 
15 - 24.09.18 - 10:12
(10)

ну и воткни там if <условие> where insert table values('Вася','Лошпед')
   scanduta
 
16 - 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 сделать.
   DES
 
17 - 24.09.18 - 19:15
А почему в конструкторе запросов "Выполнить" неактивно?
http://prntscr.com/ky5r4d
Вроде раньше можно было тестить сразу запрос, а теперь не дается.
   youalex
 
18 - 24.09.18 - 19:48
(17)  соединение не протухло?
   Fram
 
19 - 24.09.18 - 20:07
(17) а где там запрос?
   DES
 
20 - 24.09.18 - 20:26
(18) нет сразу неактивно
(19) запрос есть, (и даже если синтаксис запроса из конструктора правильный - все равно  панель не активна)
   DES
 
21 - 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
   DES
 
22 - 25.09.18 - 17:53
А как можно сохранять запросы к базе с параметрами.
Типа представлений но с параметрами
   youalex
 
23 - 25.09.18 - 19:47
(22) хранимка что ли?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует