필드 가 업데이트 되 었 는 지 여 부 를 판단 하여 Audit Log 표 에 기록 합 니 다.

2463 단어 필드업데이트
Insus.NET 은 이 문 제 를 해결 합 니 다.다른 표를 만 들 고 사용자 가 추적 하기 로 결정 한 표 와 이 표 에서 추적 해 야 할 필드 를 저장 합 니 다.또 다른 표[Audit]를 만 들 려 면 추적 기록 을 저장 하 는 표 입 니 다
 
Audit
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Audit](
[Audit_nbr] [int] IDENTITY(1,1) NOT NULL,
[AuditType] [char](1) NOT NULL,
[TableName] [nvarchar](128) NOT NULL,
[FieldName] [nvarchar](128) NULL,
[OldValue] [nvarchar](4000) NULL,
[NewValue] [nvarchar](4000) NULL,
[UserName] [nvarchar](128) NULL,
[CreateDate] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED
(
[Audit_nbr] 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
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Audit] WITH CHECK ADD CHECK (([AuditType]='D' OR [AuditType]='U' OR [AuditType]='I'))
GO
ALTER TABLE [dbo].[Audit] ADD DEFAULT (getdate()) FOR [CreateDate]
GO
누가 데 이 터 를 업데이트 하 는 지 해결 하려 면 이 방법 을 사용 하 십시오SQL 트리거 나 저장 과정 에서 프로그램 로그 인 사용 자 를 가 져 옵 니 다.다음은 추적 표를 위해 Trigger 트리거 를 업데이트 하 는 것 입 니 다.트리거 에서 INSERTED 나 DELETED 의 내부 임시 터치 발 표를 방문 하면 이상 invalid object name'inserted'또는 invalid object name'deleted'를 얻 을 수 있 습 니 다.이 문 제 를 해결 하려 면 이 편 을 참고 하 십시오.여러 표 나 한 표 가 업데이트 되 거나 삭제 되면 추적 할 데 이 터 를 Audit Log 표 에 삽입 해 야 할 때 유지 보수 와 코드 가 불필요 하기 때문에 Audit Log 표 에 삽입 하 는 과정 을 저장 과정 으로 기록 합 니 다
 
--@N @O , ,
DECLARE @sql NVARCHAR(MAX),@N DECIMAL(18,0),@O DECIMAL(18,0)
--@I
SET @sql = N'SELECT @N = ['+ CONVERT(NVARCHAR(MAX),@I) +'] FROM #inserted'
-- SQL 。
EXECUTE sp_executesql @sql,
N'@N DECIMAL(18,0) OUTPUT',
@N OUTPUT;
-- SQL , deleted 。
SET @sql = N'SELECT @O = ['+ CONVERT(NVARCHAR(MAX),@I) +'] FROM #deleted'
EXECUTE sp_executesql @sql,
N'@O DECIMAL(18,0) OUTPUT',
@O OUTPUT;
-- , , , Audit Log 。
IF (ISNULL(@N,0) <> ISNULL(@O,0))
EXECUTE [dbo].[usp_Audit_Insert] 'U','<tableName>','<fieldName>',@O,@N,@UserName

좋은 웹페이지 즐겨찾기