递归OR语句SQL Server 2016

时间:2017-05-05 07:51:45

标签: sql-server

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以尝试不同的方法。

在主表上创建一个触发器以进行更新和删除。 在数据发生变化之前,此触发器将表中已有的数据复制到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,
    [...]