나는이 다음 트리거는 우리의 시스템은 모든 작업과 함께, 핀란드와 다른 작업을 일시 중지 재생 작동SQL 트리거 조용히 실패
CREATE TRIGGER [dbo].[LastActionTrigger] on [dbo].[PlanningAction]
AFTER INSERT AS
BEGIN
DECLARE @ActionID BIGINT
DECLARE @ActionNameID BIGINT
DECLARE @MilestonePlanningID BIGINT
DECLARE @Name VARCHAR(MAX)
DECLARE @log as varchar(max)
DECLARE @cmdtxt as varchar(255)
SELECT @ActionID = i.ActionID, @ActionNameID = i.ActionNameID, @MilestonePlanningID = i.MilestonePlanningID
FROM Inserted i
IF @ActionNameID NOT IN (10,11,12)
BEGIN
UPDATE MilestonePlanning SET LastPlanningActionID = @ActionID WHERE MilestonePlanningID = @MilestonePlanningID;
--LOG
SELECT @Name = AN.ActionName FROM ActionName AN WHERE AN.ActionNameID = @ActionNameID
SET @log = 'Milestone['+CAST(@MilestonePlanningID AS VARCHAR(MAX))+'] : Last Action Changed To ' + @Name
EXEC master..xp_cmdshell @cmdtxt, no_output
SELECT @cmdtxt = 'echo ' + @log + ' >> c:\database_logs\'+DB_NAME(DB_ID())+'_'+CAST(@MilestonePlanningID AS VARCHAR(MAX))+'.txt'
SET @log = 'UPDATE MilestonePlanning SET LastPlanningActionID = '+CAST(@ActionID AS VARCHAR(MAX))+' WHERE MilestonePlanningID = ' + CAST(ISNULL(@MilestonePlanningID,0) AS VARCHAR(MAX))
EXEC master..xp_cmdshell @cmdtxt, no_output
SELECT @cmdtxt = 'echo ' + @log + ' >> c:\database_logs\'+DB_NAME(DB_ID())+'_'+CAST(@MilestonePlanningID AS VARCHAR(MAX))+'.txt'
EXEC master..xp_cmdshell @cmdtxt, no_output
EXEC(@log)
END
END
이 트리거 모든 작업은, 그러나 때때로 업데이트 문이 자동으로 실패들이거나 결코 그러나 로그 파일이 생성됩니다, 발생하지
EDIT (테스트 목적으로 내가 무슨 일이 일어나고 있는지 볼 수있는 로그 파일 작성) : 나는 다음을 시도 을,하지만 여전히 작동하지 않습니다, MilestonePlanning 행이 업데이트됩니다 일부 하지 마세요
ALTER TRIGGER [dbo].[LastActionTrigger] on [dbo].[PlanningAction]
AFTER INSERT AS
BEGIN
UPDATE MilestonePlanning SET LastPlanningActionID = i.ActionID
FROM Inserted i
WHERE MilestonePlanning.MilestonePlanningID = i.MilestonePlanningID AND i.ActionNameID NOT IN (10,11,12)
END
편집 : 트리거 근무 위, 주요 문제는 트리거가 발사 후 어떤 조치가 MilestonePlanning 업데이트 곳 뒤에 코드에서했다, 이것은 이전 LastPlanningActionID이
그래서, 그때 –
xp_cmdshell을 만 시도하고 문제점이 \t UPDATE MilestonePlanning SET LastPlanningActionID = i.ActionID \t FROM 같은 –
뭔가를 알아 내기 위해 사용 된 커서 또는 무언가를 만드는 중 하나가 필요합니다 삽입 됨 \t 어디서 MilestonePlanning.MilestonePlanningID = i.MilestonePlanningID 테스트를하고 무슨 일이 일어나는가보기 –