作者 主題: 請教一下有關TRIGGER 的問題  (閱讀 2567 次)

0 會員 與 1 訪客 正在閱讀本文。

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
請教一下有關TRIGGER 的問題
« 於: 2012-05-28 16:21 »
各位前輩好;
小弟寫了一個人事績效的網站,用來協助會計計算作業員的工作績效,並於月底做結算。
所以當生產線組長每回報一筆作業員工作記錄後。
這個insert 動作(after) 會觸發trigger 去檢查該人員是否當月有回報過了,沒有的話就產生月報記錄。
並且去計算該筆工作記錄的績效而後更新月報記錄。

上週五我修改了trigger/table,以便月報記錄中可以保存其他資料。
動工之前,已確保所有user 都離開網站並且無法使用。
修改完成之後,以暨有的測試帳號做測試OK,便重新上線開放使用了。

今天User 回饋說,上週四/五新增的三個帳號(同一條作業線)無法回報工作記錄。
我看了一下,三位作業員(A,B,C)的員工記錄已正常新增,但是在新增工作記錄時,會出現:行一'*'  出現問題。
試以Query Analyzer 執行新增的語法,也會出現行一錯誤;那應該是自已的trigger 有問題了。

猜想可能是某個條件判斷不對,才會使得"暨有員工新增工作記錄正常" 但是"新進員工新增工作記錄"失敗。
於是又新增了測試員工D做測試,但是測試員工D 一切正常。
回去測A,B,C 一樣失敗--此時工作記錄與月報表也因此都還沒有這三位員工的任何記錄。
以一樣的數值去新增員工E,F,G -- 結果仍然A,B,C 一樣失敗。
測試時A,B,C/E,F,G 與新增的測試員工D 除了姓名之外的數值並無其他不同。
------------------------------------------------------------------------------------------------------
小弟最後解決的方法是:
把trigger 中這二行:
Select @tTeamID =  (Select teamID From BscEmployeeList where ID = @tEmpID);
Select @tTitleID = (Select TitleID From BscEmployeeList where ID = @tEmpID);
修改成:
Select @tTeamID =  5 --(Select teamID From BscEmployeeList where ID = @tEmpID);
Select @tTitleID = 5 --(Select TitleID From BscEmployeeList where ID = @tEmpID);
然後測試帳號E/A -> OK了!再改成原來的樣子,
此時帳號B,C/F,G 在資料庫中一樣沒有工作記錄、也無月報記錄,但是此時這四個帳號的回報也OK 了!!
觸發trigger 不會再發生行一錯誤的訊息。

小弟的環境是SQL2000 SP4 + Win2003.
想請教的問題是--是什麼原因會導致這類狀況發生?
trigger 中前面固定都是用來放變數宣告的,搜索 * 後也確認只有在中/後段的備註裡有使用,再怎樣也不該出現在"行1"
雖然現在可以用了,但…蠻想知道這到底是發生了什麼事哩 @@??

謝謝各位前輩的指點

(下一個版本會改用stored procudure, trigger debug 粉幸苦…也是學了個經驗)
« 上次編輯: 2012-05-28 22:56 由 redjack »
Knowledge is Power