Trigger로 히스토리 남기기

김동인_278615 2015.02.16 19:34 Views : 3237

안녕하세요. 트리거 관련해서 질문이 있습니다.
아래와 같이
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 SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 20057
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12120
8558 트리거 관련 질문입니다. [1] 유리의성 2015.02.24 2635
8557 데이터베이스 테이블을 엑셀로 내려 받기 하는 방법이 있나요??? [2] 아싸라비아콜롬비아 2015.02.23 2719
8556 일반 테이블을 파티션이 적용된 테이블로 변환하려고 하는데.. 랜덤의세계 2015.02.23 2693
8555 in 사용과 XML 방식 어느 방식 사용 하면 더 좋을가요 ~~ 도래이몽 2015.02.23 2196
8554 스케줄러 관련 문의 드립니다. [1] 세균장군 2015.02.17 2247
8553 mssql 2014 인메모리 홍훈아 2015.02.17 4647
» Trigger로 히스토리 남기기 김동인_278615 2015.02.16 3237
8551 쿼리문 문의 합니다. [2] 죠리퐁 2015.02.16 2306
8550 디비 업그레이드로 restore관련 질문 입니다 ㅠㅠ [1] 풀내기vber 2015.02.16 2930
8549 품목별 최종 단가표를 어떻게 만들어야 할까요? [3] 뇽이 2015.02.16 3218
8548 동적쿼리 [2] 마힐링 2015.02.16 2561
8547 일련규칙있는 테이블 업데이트 관한건데요. 짬자면굿 2015.02.15 2034
8546 could not find stored procedure 'dbo.테이블명', 오류 해결방법 질문입니다. [1] Tamio 2015.02.14 4011
8545 sa 암호 자동으로 변경되는 것 질문합니다. [1] rhfktj 2015.02.14 2513
8544 인덱스 조각난거 정리하려고 합니다. [2] 지호아빠 2015.02.13 3439
8543 sp_changedbowner로 소유자 변경 시 보안 문제 흰가루찹쌀떡 2015.02.13 2747
8542 쿼리 로그 확인하는 방법 [1] akfflr 2015.02.13 2756
8541 코드별, 구분별 입력 값을 열형태로 코드별 구분된값으로 나열? [4] 다자녀아빠 2015.02.12 3398
8540 관련된 데이터들의 크로스체크 [1] 우츄프라 2015.02.12 2628
8539 로그용 테이블을 날짜별로 생성 하고 insert하고 싶습니다. [4] zza 2015.02.12 3957





XE Login