我有一个网站使用asp.net成员资格架构。我想在aspnet_users表上设置一个触发器,将新行的user_id和user_name插入到另一个表中。Sql Server触发从新行插入值到另一个表
我该如何去取得最后一个插入的值?
我可以选择最后一个date_created,但看起来很臭。有没有更好的办法?
我有一个网站使用asp.net成员资格架构。我想在aspnet_users表上设置一个触发器,将新行的user_id和user_name插入到另一个表中。Sql Server触发从新行插入值到另一个表
我该如何去取得最后一个插入的值?
我可以选择最后一个date_created,但看起来很臭。有没有更好的办法?
尝试一下本作的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
注意我显示的和HLGEM显示的内容之间的一个区别是我给出的代码展示了如何处理新表中除了从INSERTED拉出来的列之外的列:“a”使用文字常量,“default”使用表定义的默认值,或“null”使其未定义 – 2010-02-11 21:24:15
请注意,如果2个表格相同,则不需要列出列名称。对于稍后可能更改的记录,存储表的静态只读副本非常方便。 – 2011-03-24 01:40:18
当您处于触发器的上下文中时,可以访问逻辑表INSERTED,其中包含刚插入表的所有行。您可以基于Inserted中的选择将插入内容构建到另一个表中。
您使用插入触发器 - 在触发器内部,插入的行项目将作为逻辑表INSERTED
公开,该逻辑表具有与定义触发器的表相同的列布局。
删除触发器可以访问一个名为DELETED
的类似逻辑表。
更新触发器可以访问包含更新值的INSERTED
表和包含要更新的值的DELETED
表。
在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
当写触发记得他们对整个批次的信息采取行动一次,他们不逐行进行。因此,请在您的代码中考虑多行插入。
感谢您的快速答复大家。 – jim 2010-02-11 21:10:40