递归 OR 语句 SQL Server 2016

GPH

我正在考虑创建一个相对简单的 insert 语句,如果对表有任何更改,它会插入一条新记录。我的问题是有超过 600 列需要检查。

更多细节:前端应用程序每 15 分钟更新一次主报告表,使用 SQL 进程推送更改,但它会覆盖数据并且不维护更改日志。我无法控制这一切。

第二个表(我的表)是一个 DWH 表,它将创建更改审计。所以我使用内部连接,t1.AccountNo = t2.AccountNo and t1.Field1 <> t.2Field1然后添加一个 OR 并添加下一个字段t1.AccountNo = t2.AccountNo and t1.Field2 <> t.2Field2

鉴于列数,是否有更好的方法来获得所需的结果?

伯恩德·奥特

你可以尝试不同的方法。

在主表上创建触发器以进行更新和删除。此触发器在数据更改之前将表中已有的数据复制到 dwh 表中。

create Trigger [nameupdate] on [yourtable] after update
as
insert into [dwh]
select 
      getdate() as [ChangeDate]
      ,'update' as [Action]
      ,SYSTEM_USER as [User]
      ,d.[ID]
      ,d.[...]
 from deleted d 
GO

删除相同

create Trigger [namedelete] on [yourtable] after delete
[...]

我的 dwh 表有 3 个附加列用于跟踪,并包含主表中的所有列。

CREATE TABLE [dwh](
    [ID] [int] IDENTITY(1,1) NOT NULL Primary key,
    [ChangeDate] [datetime] NOT NULL,
    [Action] [varchar](50) NOT NULL,
    [User] [nvarchar](128) NOT NULL,
    [...]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章