2017-05-05 1 views
0

테이블에 변경 사항이있는 경우 새 레코드를 삽입하는 상대적으로 간단한 insert 문을 만듭니다. 문제는 내가 확인해야 할 600 열 이상입니다.재귀 OR 문 SQL Server 2016

세부 정보 : 주보고 테이블은 SQL 프로세스를 사용하여 프런트 엔드 응용 프로그램에서 15 분마다 업데이트되어 변경 내용을 적용하지만 데이터를 덮어 쓰고 변경 로그를 유지하지 않습니다. 나는 이것에 대한 통제권이 없다.

두 번째 테이블 (내 테이블)은 변경 감사를 생성하는 DWH 테이블입니다. 그래서 나는 내부 조인을 사용합니다. 여기서 t1.AccountNo = t2.AccountNo and t1.Field1 <> t.2Field1은 OR을 추가하고 다음 필드 인 t1.AccountNo = t2.AccountNo and t1.Field2 <> t.2Field2을 추가합니다.

원하는 수의 열을 얻는 더 좋은 방법이 있습니까?

답변

1

다른 접근 방식을 시도해 볼 수 있습니다.

업데이트 및 삭제를 위해 기본 테이블에 트리거를 생성하십시오. 이 트리거는 데이터가 변경되기 전에 이미 테이블에있는 데이터를 dwh 테이블에 복사합니다. 삭제

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

내 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 

같은 추적을위한 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 테이블과 비교할 수도 있습니다. 그것은 방아쇠의 삽입 SQL에서 마술입니다. –