Sql Server запускает значения вставки из новой строки в другую таблицу
У меня есть сайт, использующий схему членства asp.net. Я хотел бы настроить триггер в таблице aspnet_users, который добавил user_id и имя_пользователя новой строки в другую таблицу.
Как мне получить значения из последней вставки?
Я могу выбрать последнее значение date_created, но это кажется вонючим. Есть ли лучший способ?
Ответы
Ответ 1
попробуйте это для сервера 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
Ответ 2
В триггере используется триггер вставки, вставленные элементы строки будут отображаться как логическая таблица INSERTED
, которая имеет тот же макет столбца, что и таблица, на которой установлен триггер.
У удаления триггеров есть доступ к аналогичной логической таблице с именем DELETED
.
У триггеров обновлений есть доступ к таблице INSERTED
, содержащей обновленные значения и таблицу DELETED
, которая содержит значения, подлежащие обновлению.
Ответ 3
Вы можете использовать OLD
и NEW
в триггере для доступа к тем значениям, которые были изменены в этом триггере. Mysql Ref
Ответ 4
В триггере 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
Когда вы находитесь в контексте триггера, у вас есть доступ к логической таблице INSERTED, которая содержит все строки, которые только что были вставлены в таблицу. Вы можете создать свою вставку в другую таблицу на основе выбора из Inserted.
Ответ 6
Create
trigger '[dbo].[mytrigger]' on '[dbo].[Patients]' after update , insert as
begin
--Sql logic
print 'Hello world'
end