안녕하세요. 트리거 관련해서 질문이 있습니다.
아래와 같이
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