2010-02-11 161 views
29

我有一个网站使用asp.net成员资格架构。我想在aspnet_users表上设置一个触发器,将新行的user_id和user_name插入到另一个表中。Sql Server触发从新行插入值到另一个表

我该如何去取得最后一个插入的值?

我可以选择最后一个date_created,但看起来很臭。有没有更好的办法?

+0

感谢您的快速答复大家。 – jim 2010-02-11 21:10:40

回答

54

尝试一下本作的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 
+2

注意我显示的和HLGEM显示的内容之间的一个区别是我给出的代码展示了如何处理新表中除了从INSERTED拉出来的列之外的列:“a”使用文字常量,“default”使用表定义的默认值,或“null”使其未定义 – 2010-02-11 21:24:15

+1

请注意,如果2个表格相同,则不需要列出列名称。对于稍后可能更改的记录,存储表的静态只读副本非常方便。 – 2011-03-24 01:40:18

3

您可以在触发器中使用OLDNEW来访问在该触发器中已更改的那些值。 Mysql Ref

+3

他_did_指定MS SQL,而不是MySql – Oded 2010-02-11 21:09:32

+3

他没有在Teja发布响应时。更何况,知道其他系统的类似方法从未受伤。 – cmsjr 2010-02-11 21:18:35

+0

这是MS Sql,它被编辑到SQL Server,因为cmsjr说...它不会伤害。 – jim 2010-02-11 21:20:33

4

当您处于触发器的上下文中时,可以访问逻辑表INSERTED,其中包含刚插入表的所有行。您可以基于Inserted中的选择将插入内容构建到另一个表中。

12

您使用插入触发器 - 在触发器内部,插入的行项目将作为逻辑表INSERTED公开,该逻辑表具有与定义触发器的表相同的列布局。

删除触发器可以访问一个名为DELETED的类似逻辑表。

更新触发器可以访问包含更新值的INSERTED表和包含要更新的值的DELETED表。

5

在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 

当写触发记得他们对整个批次的信息采取行动一次,他们不逐行进行。因此,请在您的代码中考虑多行插入。

+2

注意我显示的内容和KM显示的内容之间的一个区别是我给了代码以确保该记录不存在于表2中。她/他显示了除了您可用的其他必填字段如果有的话插入。 – HLGEM 2010-02-11 21:12:06

+0

好的,谢谢澄清。我感谢你的时间。 – jim 2010-02-11 21:17:05

相关问题