sql - 仅使用已编辑行更新另一个表的触发器
问题描述
是否可以在仅将某人编辑的行输入到新表中的数据库上创建触发器。所以说tbl1
有人更改了一个名为“名称”的列。我想获取已编辑的行并将其放入tbl2
. 所以我想tbl1
只从那个已编辑的行中取出一些其他列并将其存储在一个新表中。我想跟踪更改名称的时间以及日期和时间。这甚至可以通过触发器实现吗?我了解如何为触发事件设置表格。但是我很难理解如何在没有加入的情况下将价值观tbl1
带到一起。tbl2
ALTER TRIGGER testname
ON tbl1
AFTER UPDATE
AS
IF UPDATE(name)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO tbl2 (ODID,ID2)
VALUES ();
END
GO
解决方案
根据您的要求,您可以在触发器中使用动态 Sql。
这只是一个想法,
ALTER TRIGGER testname
ON tbl1
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @Sql varchar(500)=''
declare @Col varchar(500)=''
IF UPDATE(FirstName)
set @Col=' FirstName '
IF UPDATE(LastName)
set @Col=@Col+', LastName '
set @Sql='INSERT INTO tbl2 (ODID,ID2)
select '+@Col+' from inserted'
sp_executesql @Sql
END
GO
这是非常繁琐的做法。而是创建将作为 tbl1 副本的历史表。
ALTER TRIGGER testname
ON tbl1
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
insert into tbl1History
select * from deleted
END
GO
推荐阅读
- java - 在 assertj 中使用ComparatorForType 似乎不适用于作为对象属性的对象属性
- c# - 来自 PLC 的 C# UDP 消息无法在 Unity3D 中接收,但在 Wireshark 中可见
- android - Android:按住/单击按钮时如何更改/删除按钮行程
- jsf - 在primefaces中显示数据表中的数据到inputText
- javascript - JQuery滑块导航点不起作用
- primefaces - 有没有办法在 Primefaces 数据表中重复标题?
- cython - Cython:管道异常到文件并显式中止
- c# - 如何知道 TTS 是否完成
- docker - docker swarm 中的标签 - 它是如何工作的?
- node.js - NodeJS: TypeError: Converting circular structure to JSON