我有一个使用asp.net成员资格模式的网站。我想在aspnet_users表上设置一个触发器,它将user_id和新行的user_name插入到另一个表中。
如何从最后一次插入中获取值?
我可以选择最后一个date_created,但这看起来很臭。还有更好的方法吗?
答案 0 :(得分:57)
尝试使用sql server
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
答案 1 :(得分:12)
使用插入触发器 - 在触发器内部,插入的行项将作为逻辑表INSERTED
公开,其具有与定义触发器的表相同的列布局。
删除触发器可以访问名为DELETED
的类似逻辑表。
更新触发器可以访问包含更新值的INSERTED
表和包含要更新的值的DELETED
表。
答案 2 :(得分:5)
您可以在触发器中使用OLD
和NEW
来访问那些触发器中已更改的值。 Mysql Ref
答案 3 :(得分:5)
在SQL Server触发器中,您有两个名为inserted和deleted的psdeuotable。它们包含记录的旧值和新值。
因此,在触发器内(您可以轻松查找创建触发器部件),您可以执行以下操作:
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
当写入触发器时,记住它们对整批信息执行一次,它们不会逐行处理。因此,在代码中考虑多行插入。
答案 4 :(得分:4)
当您处于触发器的上下文中时,您可以访问逻辑表INSERTED,其中包含刚刚插入表中的所有行。您可以根据从Inserted中选择的内容将插入内容构建到另一个表。
答案 5 :(得分:1)
Create
trigger `[dbo].[mytrigger]` on `[dbo].[Patients]` after update , insert as
begin
--Sql logic
print 'Hello world'
end