作者 主題: 請教更新資料表的問題(由trigger 去更新另一table)  (閱讀 2990 次)

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

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
有一個表(reports)的結構與內容如下:
ID,employeeID, theMonth,1,2,3,4....29,30,31,Total,Bouns
1,10,2011-09-01 00:00:00.000,4.5,3,2.5,1,4.5,0,0,0,0...,15.5,0
2,11,2011-09-01 00:00:00.000,3.5,3,1.5,1,3.5,0,0,0,0...,12.5,0
其中欄位1,2,3...是日曆中的1號~31號,由theMonth來判斷該筆資料是屬於某年某月。
現在小弟想要做成當前端的資料變更時(另一個表格),可以來動態更新這個表格中的數據。

這個東西的功能是用來讓生產線的組長可以回報人員每次工作的績效,所以常常會輸入新的記錄進入到另一個表(produceReporting)(存放某個作業員的每筆工作)、或是去更新既有記錄(比如說打錯字)
最後會計去另一個網頁瀏覽,並視情況給定獎金(輸入於Bonus一欄),目前為了人事上的彈性,所以獎金一欄需要可以讓會計編輯與儲存。

目前小弟的做法是在produceReporting上建一個trigger,當發生變動時做以下的判斷:
如果reports 中沒有(該員工於當年當月的資料),則新增一筆  -> 這個OK了。
如果已經有的話,則更新對應到的欄位;比方說組長回報(新增)了員工(id: 10) 在2011-9/3的工作內容,則去更新上例中,id為1的記錄 [3]的欄位,把原有的績效點數加上新點數 -> 這邊卡住了。

目前寫到這樣:
set  @tSQL = ('select cast(' + rtrim(@tDayField)  + ' as float(4)) from rptpr01 where (employeeid = ' + str(@tEmpID,len(@tEmpID)) + ') and (year(theMonth) = ' + rtrim(@tYear) + ') and (Month(theMonth) = ' + rtrim(@tMonth)  + ') and (workingTimeType = ' + rtrim(@tWorkingTimeType) + ' )' )
(↑用一堆rtrim 是因為不想在測試中看到一大堆空白。)

在QueryAnalysis 中運行exec(@tSQL) 可以得到我要的值,就我測試時用的記錄而言是5.0,但是不知道怎麼把5.0給指定到另外一個@變數去以便和加數相加?
所以來這邊跟各位前輩求救一下要怎麼做比較好。又或許可以直接相加再更新上去?

小弟之前都只寫過一些單純的東西,第一次寫這種"比較複雜"的,如果有其他的做法,也請各位前輩指點一下。
最後真的沒辦法的話,就只好用前端的程式來寫了。

在此先謝謝各位前輩的幫忙。
Knowledge is Power

redjack

  • 活潑的大學生
  • ***
  • 文章數: 426
    • 檢視個人資料
騎車回家的路上熊熊想到:其實也可以每次都重新加總一次,直接UPDATE就好了@@!

不過如果要照原先的想法下去相加的話…就還是無解中 >"<
Knowledge is Power