적어도 두 명 이상의 사람들이 동시에 사용할 수있는 SQL Server 2012 데이터베이스와 통신하는 간단한 VB NET/WPF 응용 프로그램을 만들고 있습니다.트리거 기반 SQL Server 감사
데이터베이스의 모든 변경 사항 (INSERT/UPDATE/DELETE)을 추적하려면 간단한 트리거 기반 감사 시스템을 구현합니다. 여기서 분명히 업데이트/삭제/삽입되는 데이터는 또한 사용자 및 작업 날짜/시간을 추적하면서 해당 감사 테이블을 표시합니다.
나는 분명히 많은 수의 가이드를 검색하는 동안 발견했다. 그러나 대부분의 SQL Server 가이드가 쿼리에서 JOIN을 사용하여 Inserted
또는 Deleted
테이블에 저장된 데이터를 추출하는 것으로 나타났습니다. 반면 JOIN은없는 결과를 얻었습니다.
Exemple :
내 INSERT 트리거 :
CREATE TRIGGER [HumanResources].[after_insert_humanresources_shift] ON [HumanResources].[Shift] AFTER INSERT AS BEGIN INSERT INTO [HumanResources].[Shift_Audit] ( -- [EventID], [EventBy] and [EventOn] have autovalues [EventType], [ShiftID], [Name], [StartTime], [EndTime], [ModifiedDate] ) SELECT 'INSERT', [ShiftID], [Name], [StartTime], [EndTime], [ModifiedDate] FROM [Inserted] END
This guide's INSERT 트리거 :
create trigger tblTriggerAuditRecord on tblOrders after insert as begin insert into tblOrdersAudit (OrderID, OrderApprovalDateTime, OrderStatus, UpdatedBy, UpdatedOn) select i.OrderID, i.OrderApprovalDateTime, i.OrderStatus, SUSER_SNAME(), getdate() from tblOrders t inner join inserted i on t.OrderID=i.OrderID end
가 삭제 내 및 UPDATE 트리거가 정확히 같은 생을 ng. 그리고이 모든 것들은 단일 D/U/I 질의 또는 다중 질의 (예를 들어 단일 질의에서 다중 업데이트) 모두에 대해 작동합니다. JOIN을 사용해야하는 특별한 이유가 있습니까?
그러면 '삽입'및 '삭제'테이블에 이미 트리거가 발생한 쿼리가 변경 한 데이터와 다른 데이터가 포함될 수 있습니까? – Naucle
또한 동일한 레코드의 여러 업데이트를 처리하는 방법과 사용자 별 업데이트 기록을 작성하는 방법을 검토해야합니다. 업데이트 된 날짜 등 위치를 포함 할 수 있습니다. CDC 내에서이 감사를 수행하는 방법은 여러 가지가 있습니다 (변경 데이터 캡처)에 SSIS를 사용하여 예제를 붙여 넣었습니다. 이것이 도움이되기를 바랍니다. https://docs.microsoft.com/en-us/sql/integration-services/change-data-capture/change-data-capture-ssis – jimmy8ball
제 생각에 모든 DELETE 쿼리는 자체적으로 'Deleted' 테이블을 생성합니다. 상기 쿼리에 의해 삭제되는 행을 포함하므로, 트리거는 트리거 할 때 수행 한 테스트에 의해 확인 된 ID를 JOIN 할 필요없이 정확히 볼 위치를 알고 있습니다. 당신의 요점을 설명 할 수있는 예를 들어 줄 수 있습니까? 또한, 나는 이미 CDC를 시도했다. 문제는 변화를 저지른 사용자를 추적 할 방법이 없다는 것이다. – Naucle