Sql Server триггер вставляет значения из новой строки в другую таблицу - PullRequest
29 голосов
/ 12 февраля 2010

У меня есть сайт, использующий схему членства asp.net. Я хотел бы установить триггер для таблицы aspnet_users, который вставил бы user_id и user_name новой строки в другую таблицу.

Как мне получить значения из последней вставки?

Я могу выбрать по дате создания, но это кажется вонючим. Есть ли лучший способ?

Ответы [ 6 ]

57 голосов
/ 12 февраля 2010

попробуйте это для сервера sql

CREATE TRIGGER yourNewTrigger ON yourSourcetable
FOR INSERT
AS

INSERT INTO yourDestinationTable
        (col1, col2    , col3, user_id, user_name)
    SELECT
        'a'  , default , null, user_id, user_name
        FROM inserted

go
13 голосов
/ 12 февраля 2010

Вы используете триггер вставки - внутри триггера вставленные элементы строки будут представлены в виде логической таблицы INSERTED, которая имеет ту же структуру столбцов, что и таблица, для которой определен триггер.

Триггеры удаления имеют доступ к аналогичной логической таблице с именем DELETED.

Триггеры обновления имеют доступ как к таблице INSERTED, которая содержит обновленные значения, так и к таблице DELETED, которая содержит значения, подлежащие обновлению.

5 голосов
/ 12 февраля 2010

В триггере SQL Server у вас есть две psdeuotables, которые называются вставленными и удаленными. Они содержат старые и новые значения записи.

Таким образом, в пределах триггера (вы можете легко просмотреть части создания триггера) вы бы сделали что-то вроде этого:

Insert table2 (user_id, user_name)
select user_id, user_name from inserted i
left join table2 t on i.user_id = t.userid
where t.user_id is null

При написании триггеров помните, что они действуют один раз на весь пакет информации, они не обрабатывают построчно. Поэтому учтите несколько вставок строк в вашем коде.

5 голосов
/ 12 февраля 2010

Вы можете использовать OLD и NEW в триггере для доступа к тем значениям, которые были изменены в этом триггере. Mysql Ref

4 голосов
/ 12 февраля 2010

Когда вы находитесь в контексте триггера, у вас есть доступ к логической таблице INSERTED, которая содержит все строки, которые только что были вставлены в таблицу. Вы можете встроить свою вставку в другую таблицу на основе выбора из Вставлено.

1 голос
/ 19 января 2019
Create 
trigger `[dbo].[mytrigger]` on `[dbo].[Patients]` after update , insert as
begin
     --Sql logic
     print 'Hello world'     
 end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...