Sql Server触发器将值从新行插入另一个表

时间:2010-02-11 21:01:51

标签: sql sql-server triggers

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

如何从最后一次插入中获取值?

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

6 个答案:

答案 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)

您可以在触发器中使用OLDNEW来访问那些触发器中已更改的值。 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