递归OR语句SQL Server 2016

问题描述:

我在创建插入新记录的相对简单的插入语句,如果有任何表的更改。我遇到的问题是有600多列需要检查。递归OR语句SQL Server 2016

更多详细信息:主报告表从前端应用程序每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, 
    [...] 
+0

这可能是一个很好的前进方向,只有问题是我需要做一个插入触发器,但数据每天晚上重建..所以它会每晚创建所有数据。你可以安排触发器只在特定的时间运行!?! – GPH

+0

忽略我。您可以!这是完美的 – GPH

+0

你也可以创建一个诅咒的插入触发器。您可以在每个触发器中比较新的(插入的表格)和旧的数据(删除的表格)。你也可以比较dwh表。这只是在触发器的insert sql中的魔法。 –