Trigger로 히스토리 남기기

김동인_278615 2015.02.16 19:34 Views : 3188

안녕하세요. 트리거 관련해서 질문이 있습니다.
아래와 같이
Insert, Update, Delete 트리거를 회원테이블에 작성을 하여 히스토리 테이블에 넣었습니다.

가끔 회원테이블에서 데이타가 삭제가 되는데 일부가 히스토리에 남지를 않습니다.
가끔 알수없는 데이타 변경건에 대해 추적을 하려고 트리거를 남겼는데
일부 히스토리에 남지를 않네요...
어떤경우에 남지를 않는건지 도저히 찾을수가 없네요.~~~

목적 : 회원 정보 In,Up,Del 시에
       언제, 행위(In,Up,Del), 쿼리, 실행계정(누가), 프로그래명(어떤프로그램이), 
       서버명(어떤서버가), 컬럼명(어떤컬럼을 Up), 변경된 컬럼값~~~~

위와 같은 목적으로 트리거를 적용시켰습니다.


의심되는 부분이
CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')
위 부분과
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
이부분인데...
혹시 위의 정보가 특정경우에 오류가 나거나 데이타가 없는것인지요

아 그리고 Member_His는 모두 Null 처리 되어 있습니다.




Create Trigger [dbo].[TR_Member_damo_Insert_Trigger] ON [dbo].[Member_damo] AFTER INSERT
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

SET NOCOUNT ON;
DECLARE @ActionType varchar(10)
Declare @ColumnType varchar(20)
set @ActionType = 'IN'
set @ColumnType = ''

CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')

INSERT INTO Member_His
(
inDT,
ActionType,
nQuery,
LoginName,
ApplicationName,
HostName,
UpInfo,
sec_MdnNum_En,
sec_MinNum_En,
SvcMngNum,
Amount, 
BankCode,
SecurityCode,
ModelName, 
App_Ver,
Service_GB
)
SELECT
GetDate(),
@ActionType, --행위
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
@ColumnType, --컬럼명
b.sec_MdnNum_En,
b.sec_MinNum_En,
b.SvcMngNum,
b.Amount,
b.BankCode,
b.SecurityCode,
b.ModelName,
b.App_Ver,
b.Service_GB
FROM Inserted b
END
go







create Trigger [dbo].[TR_Member_damo_Update_Trigger] ON [dbo].[Member_damo] AFTER Update
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

SET NOCOUNT ON;
DECLARE @ActionType varchar(10)
Declare @ColumnType varchar(1000)
set @ActionType = 'UP'
set @ColumnType = ''
if Update(sec_MdnNum_En) 
set @ColumnType = @ColumnType + 'sec_MdnNum_En,'
if Update(sec_MinNum_En) 
set @ColumnType = @ColumnType + 'sec_MinNum_En,'
if Update(SvcMngNum) 
set @ColumnType = @ColumnType + 'SvcMngNum,'
if Update(Amount) 
set @ColumnType = @ColumnType + 'Amount,'
if Update(BankCode) 
set @ColumnType = @ColumnType + 'BankCode,'
if Update(SecurityCode) 
set @ColumnType = @ColumnType + 'SecurityCode,'
if Update(ModelName) 
set @ColumnType = @ColumnType + 'ModelName,'
if Update(App_Ver) 
set @ColumnType = @ColumnType + 'App_Ver,'
if Update(Service_GB) 
set @ColumnType = @ColumnType + 'Service_GB,'
CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')

INSERT INTO Member_His
(
inDT,
ActionType,
nQuery,
LoginName,
ApplicationName,
HostName,
UpInfo,
sec_MdnNum_En,
sec_MinNum_En,
SvcMngNum,
Amount, 
BankCode,
SecurityCode,
ModelName, 
App_Ver,
Service_GB
)
SELECT
GetDate(),
@ActionType, --행위
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
@ColumnType, --컬럼명
b.sec_MdnNum_En,
b.sec_MinNum_En,
b.SvcMngNum,
b.Amount,
b.BankCode,
b.SecurityCode,
b.ModelName,
b.App_Ver,
b.Service_GB
FROM Inserted b
END
go








create Trigger [dbo].[TR_Member_damo_Delete_Trigger] ON [dbo].[Member_damo] AFTER Delete
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

SET NOCOUNT ON;
DECLARE @ActionType varchar(10)
Declare @ColumnType varchar(20)
set @ActionType = 'DEL'
set @ColumnType = ''

CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')

INSERT INTO Member_His
(
inDT,
ActionType,
nQuery,
LoginName,
ApplicationName,
HostName,
UpInfo,
sec_MdnNum_En,
sec_MinNum_En,
SvcMngNum,
Amount, 
BankCode,
SecurityCode,
ModelName, 
App_Ver,
Service_GB
)
SELECT
GetDate(),
@ActionType, --행위
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
@ColumnType, --컬럼명
b.sec_MdnNum_En,
b.sec_MinNum_En,
b.SvcMngNum,
b.Amount,
b.BankCode,
b.SecurityCode,
b.ModelName,
b.App_Ver,
b.Service_GB
FROM deleted b
END
go



No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 479
8569 sql db를 삭제 했다가 복원했습니다. 아싸라비아콜롬비아 2015.02.26 2369
8568 링크드서버와 트리거 [3] 발코딩 2015.02.26 5742
8567 다중 LEFT OUTER JOIN 에러가 뜹니다 [3] park87 2015.02.26 4496
8566 select 로 출력시 데이터 타입 변환 어떻게 하나요? [2] park87 2015.02.25 2946
8565 기간별 평균값을 구하는 쿼리 질문드립니다. [2] 비폭력무저항 2015.02.25 3066
8564 case when 에서 NULL을 제대로 처리 못하는듯 합니다 [2] park87 2015.02.25 3002
8563 날짜를 interval 간격으로 구해오는 쿼리 질문입니다. [7] 비폭력무저항 2015.02.25 3916
8562 콤마쿼리 이유진_301818 2015.02.25 2439
8561 @@IDENTITY 관련 유리의성 2015.02.24 2235
8560 SP_EXECUTESQL로 동적쿼리 실행 시 질문입니다. [1] Sting 2015.02.24 2555
8559 sql프로파일러 에러 찾기 질문 [4] akfflr 2015.02.24 2906
8558 트리거 관련 질문입니다. [1] 유리의성 2015.02.24 2618
8557 데이터베이스 테이블을 엑셀로 내려 받기 하는 방법이 있나요??? [2] 아싸라비아콜롬비아 2015.02.23 2690
8556 일반 테이블을 파티션이 적용된 테이블로 변환하려고 하는데.. 랜덤의세계 2015.02.23 2674
8555 in 사용과 XML 방식 어느 방식 사용 하면 더 좋을가요 ~~ 도래이몽 2015.02.23 2180
8554 스케줄러 관련 문의 드립니다. [1] 세균장군 2015.02.17 2228
8553 mssql 2014 인메모리 홍훈아 2015.02.17 4639
» Trigger로 히스토리 남기기 김동인_278615 2015.02.16 3188
8551 쿼리문 문의 합니다. [2] 죠리퐁 2015.02.16 2286
8550 디비 업그레이드로 restore관련 질문 입니다 ㅠㅠ [1] 풀내기vber 2015.02.16 2908





XE Login