Я создал следующую базу данных, таблицы и триггер для обновления, чтобы вести журнал обновлений. Когда пользователь изменяет имя / зарплату / пол / отправление, он обновляет журнал в таблице 'tblEmployeeAudit'.
Теперь есть ловушка, если мы просто обновляем то же значение, которое уже обновлено в системе, тогдане обновляется запись об обновлении в таблице 'tblEmployeeAudit'.
Например: - если tblEmployee имеет имя EmployeeName Ravi с Id = 1, то если обновление с таким же именем, тогда журнал обновляться не будет, но в этом нетпроисходит. Пожалуйста, помогите мне.
Create database learning
use learning
USE [learning]
GO
/****** Object: Table [dbo].[tblEmployee] Script Date: 11/11/2019 3:54:13 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblEmployee](
[Id] [int] NOT NULL,
[Name] [nvarchar](30) NULL,
[Salary] [int] NULL,
[Gender] [nvarchar](10) NULL,
[DepartmentId] [int] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [learning]
GO
/****** Object: Table [dbo].[tblEmployeeAudit] Script Date: 11/11/2019 3:54:34 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblEmployeeAudit](
[Id] [int] IDENTITY(1,1) NOT NULL,
[AuditData] [nvarchar](1000) NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Alter trigger tr_tblEmployee_ForUpdate
on tblEmployee
For Update
As
Begin
Declare @Id int
Declare @OldName nvarchar(30),@NewName nvarchar(30)
Declare @OldSalary int,@NewSalary int
Declare @OldGender nvarchar(10),@NewGender nvarchar(10)
Declare @OldDeptId int,@NewDeptId int
Declare @AuditString nvarchar(1000)
Select * into #TempTable
from inserted
While(Exists(Select Id from #TempTable))
Begin
Set @AuditString=''
Select Top 1 @Id=Id,@NewName=Name,@NewSalary=Salary,@NewGender=Gender,@NewDeptId=DepartmentId from #TempTable
Select @OldName=Name,@OldSalary=Salary,@OldGender=Gender,@OldDeptId=DepartmentId from deleted where Id=@Id
Set @AuditString='Employee with Id='+CAST(@Id as nvarchar(4))+' changed '
if(@OldName<>@NewName)
Set @AuditString=@AuditString+'NAME from '+@OldName+' to '+@NewName
if(@OldSalary<>@NewSalary)
Set @AuditString=@AuditString+'Salary from '+@OldSalary+' to '+@NewSalary
if(@OldGender<>@NewGender)
Set @AuditString=@AuditString+'Gender from '+@OldGender+' to '+@NewGender
if(@OldDeptId<>@NewDeptId)
Set @AuditString=@AuditString+'DepartmentId from '+@OldDeptId+' to '+@NewDeptId
insert into tblEmployeeAudit values(@AuditString)
Delete from #TempTable where Id=@Id
End
End
update tblEmployee
set Name='Joseph' where Id=4
Примечание: - Следите за данными, вставленными даже в том случае, если нет несовпадающих строк - обновленный сотрудник с Id = 4 изменен