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

Откуда: Украина
Сообщений: 6
Ребята может кто подскажет, как в сиквеол сервере написать тригер, который при вставке данных в одну таблицу будет их дублировать во вторую

к примеру есть таблица записей и их история

CREATE TABLE [Records]
([Id] int PRIMARY KEY Identity(1,1) not null,
[Name] nvarchar(50) not null,
[EditorId] int not null);

CREATE TABLE [RecordHistory]
([Id] int PRIMARY KEY Identity(1,1) not null,
[RecordId] int not null,
[EditorId] int not null,
[CreateDate] datetime not null);

??

и может кто поможет с тригером на Update , чтобы при редактировании данных в табл Records вставлялись записи в RecordHistory
5 авг 11, 11:37    [11075240]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Как Вы пробовали и что не получилось?
5 авг 11, 11:44    [11075307]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Александр Кульчицкий
Member

Откуда: Украина
Сообщений: 6
Пробовал таким образом

IF OBJECT_ID(N'InsertCRRHistory',N'TR') IS NOT NULL
DROP TRIGGER [InsertCRRHistory]
GO

CREATE TRIGGER [InsertCRRHistory] ON [Records]
AFTER INSERT
AS
DECLARE @ID int;
BEGIN
SELECT @ID=Id FROM INSERTED
INSERT INTO [RecordHistory] SELECT [Id],[EditorId],getdate() FROM INSERTED
WHERE Id=@ID
END

В ответ получил Incorrect syntax near the keyword 'SELECT'.
5 авг 11, 11:51    [11075378]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Александр Кульчицкий,

В приводимом Вами скрипте не может быть такой синтаксической ошибки. И записей может вставляться больше чем одна.
5 авг 11, 11:57    [11075441]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Александр Кульчицкий
Пробовал таким образом

IF OBJECT_ID(N'InsertCRRHistory',N'TR') IS NOT NULL
  DROP TRIGGER [InsertCRRHistory]
GO
       
CREATE TRIGGER [InsertCRRHistory]  ON [Records]
AFTER INSERT
AS 
DECLARE @ID int;
BEGIN
SELECT @ID=Id FROM INSERTED
INSERT INTO [RecordHistory] SELECT [Id],[EditorId],getdate() FROM INSERTED 
		WHERE Id=@ID
END

В ответ получил Incorrect syntax near the keyword 'SELECT'.


У вас ошибка в 7-й строке :) И, кстати, вы точно уверены, что в Records всегда вставляется одна запись?
5 авг 11, 11:58    [11075455]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Александр Кульчицкий
В ответ получил Incorrect syntax near the keyword 'SELECT'.

это не весь текст ошибки, там еще указывается место где она произошла
скорее всего, у вас в редакторе выделено одно слово SELECT и вы пытаетесь его выполнить
5 авг 11, 12:00    [11075473]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Александр Кульчицкий
Member

Откуда: Украина
Сообщений: 6
=) Нет , в этом плане не уверен) судя по всему возможны варианты с несколькоми вставками...
5 авг 11, 12:01    [11075479]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Александр Кульчицкий
=) Нет , в этом плане не уверен) судя по всему возможны варианты с несколькоми вставками...
А как Вы собирались хранить несколько id в одной скалярной переменной @ID int?
5 авг 11, 12:04    [11075502]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Александр Кульчицкий,

в общем, уберите в своем триггере DECLARE и условие отбора. и будет вам счастье.
5 авг 11, 12:05    [11075508]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Александр Кульчицкий,

непонятно только, зачем дублировать данные в двух таблицах?
Ведь после INSERTа в [Records] хранятся актуальные данные,
а истории изменений ещё нет.
5 авг 11, 12:10    [11075550]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Александр Кульчицкий
Member

Откуда: Украина
Сообщений: 6
Ну я как предпологал что при создании данных в рекорде мы дублируем запись в хистори,
а в дальнейшем сделать тригер на update на табличку Records и чтобы при изменении даных в рекодре соответствено вставлялась новая запись в хистори..
таким образо получить историю изменений,
на самом деле таблички у меня чуть более обширны, это так для примера их сократил.
5 авг 11, 12:15    [11075608]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Александр Кульчицкий
Ну я как предпологал что при создании данных в рекорде мы дублируем запись в хистори,
а в дальнейшем сделать тригер на update на табличку Records и чтобы при изменении даных в рекодре соответствено вставлялась новая запись в хистори..
таким образо получить историю изменений,
на самом деле таблички у меня чуть более обширны, это так для примера их сократил.
Поэтому логировать надо только deleted для UPDATE и DELETE,
причём при UPDATE - только записи, в которых хоть что-то изменилось.

Дату создания добавить в [Records]
5 авг 11, 12:18    [11075639]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на Insert который при срабатывании будет вставлять данные в другую???  [new]
Александр Кульчицкий
Member

Откуда: Украина
Сообщений: 6
=) Спасибо большое за советы)
5 авг 11, 12:22    [11075662]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить