我有這個以下觸發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
我們的系統的工作原理與播放暫停芬蘭和其他行動,所有的行動,他們與這個觸發所有的工作,但有時候更新語句自動失效或從來沒有發生,但日誌文件被創建(爲了測試的目的,我寫了日誌文件,看看發生了什麼)
編輯: 我試過以下,但仍然無效,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重置
所以,如果我理解正確的這個,那麼我要麼需要創建 – 2014-11-05 10:19:17
xp_cmdshell的僅用於嘗試並找出問題 – 2014-11-05 10:21:48
像這樣的事情 \t UPDATE MilestonePlanning SET LastPlanningActionID = i.ActionID \t從遊標或東西插入我 \t哪裏MilestonePlanning.MilestonePlanningID = i.MilestonePlanningID 去測試,看看會發生什麼 – 2014-11-05 10:26:06