递归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,
[...]
这可能是一个很好的前进方向,只有问题是我需要做一个插入触发器,但数据每天晚上重建..所以它会每晚创建所有数据。你可以安排触发器只在特定的时间运行!?! – GPH
忽略我。您可以!这是完美的 – GPH
你也可以创建一个诅咒的插入触发器。您可以在每个触发器中比较新的(插入的表格)和旧的数据(删除的表格)。你也可以比较dwh表。这只是在触发器的insert sql中的魔法。 –