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

jim*_*jim 31 sql sql-server triggers

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

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

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

KM.*_*KM. 59

试试这个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
Run Code Online (Sandbox Code Playgroud)

  • 请注意我显示的内容和HLGEM显示的内容之间的区别是我给出了代码以显示如何处理新表中的列而不是从INSERTED中提取的列:"a"使用文字常量,"default"使用表定义的默认值,或"null"保持未定义 (2认同)

Ode*_*ded 14

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

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

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


Tej*_*eni 5

您可以使用OLDNEW在触发器中访问那些在该触发器中已更改的值.Mysql参考

  • 当Teja发布回应时,他没有.更不用说,了解其他系统的类似方法从不会受到伤害. (5认同)
  • 他_did_指定MS SQL,而不是MySql (3认同)

HLG*_*GEM 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
Run Code Online (Sandbox Code Playgroud)

在编写触发器时记住它们对整批信息执行一次,它们不会逐行处理.因此,在代码中考虑多行插入.

  • 请注意我显示的内容和KM显示的内容之间的差异我给了您代码以确保记录在表2中不存在.她/他展示了如何处理除插入中可用的字段之外的其他必填字段如果有的话. (2认同)