Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
Бюрократ
Guest
Для таблицы table1 выполняем Insert и если в триггере происходит откат(asd=1), то сбрасываем вставляемые данные в таблицу temp_table1
CREATE TABLE [dbo].[table1] 

[asd] [int] NOT NULL ,
[asd2] [int] NOT NULL
GO
CREATE TABLE [dbo].[temp_table1]
[asd] [int] NOT NULL ,
[asd2] [int] NOT NULL
GO

Если вставляется одна запись, то просто
CREATE TRIGGER ins_table1 ON dbo.TABLE1

FOR INSERT
AS
IF EXISTS (SELECT * FROM inserted WHERE asd=1)
BEGIN
DECLARE
@var1 int
,@var2 int
SELECT @var1=asd, @var2=asd2 FROM inserted WHERE asd=1
ROLLBACK TRANSACTION
INSERT temp_table1 VALUES(@var1, @var2)
END

А если несколько записей? Может быть это можно сделать не через переменные?
Временная таблица не помогла. Помогите, пожалуйста
29 мар 03, 09:10    [159767]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Вот такая тут идея пришла, а что если не откатывать транзакцию, а удалять те записи, которые не проходят проверку:

CREATE TRIGGER ins_table1 ON dbo.TABLE1

FOR INSERT
AS
IF EXISTS (SELECT * FROM inserted WHERE asd=1) BEGIN
INSERT temp_table1 SELECT * FROM inserted WHERE asd=1
DELETE ins_table1
FROM ins_table1
INNER JOIN inserted ON
ins_table1.keyfield = inserted.keyfield
END
29 мар 03, 09:40    [159774]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Млин, условие забыл дописать:

CREATE TRIGGER ins_table1 ON dbo.TABLE1

FOR INSERT
AS
IF EXISTS (SELECT * FROM inserted WHERE asd=1) BEGIN
INSERT temp_table1 SELECT * FROM inserted WHERE asd=1
DELETE ins_table1
FROM ins_table1
INNER JOIN inserted ON
ins_table1.keyfield = inserted.keyfield
WHERE inserted.asd=1
END
29 мар 03, 09:43    [159775]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
бюрократ
Guest
При выполнении
INSERT table1 VALUES(1, 3) 

с использованием предложенного триггера выдается ошибка
Server: Msg 208, Level 16, State 3, Procedure ins_table1, Line 6

Invalid object name 'ins_table1'.
Server: Msg 208, Level 16, State 1, Procedure ins_table1, Line 6
Invalid object name 'ins_table1'.

Кстати, у меня версия 7.0
29 мар 03, 09:58    [159783]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ну конечно, ошибку я допустил, вместо имени таблицы TABLE1 имя триггера написал. Вот блин.

CREATE TRIGGER ins_table1 ON dbo.TABLE1

FOR INSERT
AS
IF EXISTS (SELECT * FROM inserted WHERE asd=1) BEGIN
INSERT temp_table1 SELECT * FROM inserted WHERE asd=1
DELETE TABLE1
FROM TABLE1
INNER JOIN inserted ON
TABLE1.keyfield = inserted.keyfield
WHERE inserted.asd=1
END
29 мар 03, 10:05    [159788]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
бюрократ
Guest
Спасибо, pkarklin, все работает отлично!!
29 мар 03, 10:15    [159791]     Ответить | Цитировать Сообщить модератору
 Re: HELP: как сохранить отвергнутую триггером запись при INSERT  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
блин уже даже не читают код ,а тупо копируют.........
29 мар 03, 13:25    [159835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить