三個目的資料表都有個InsuranceID欄位,但是只有資料表A是設成identity,資料表BC都沒有設,然後每次傳遞三個資料表的InsuranceID都要一樣才行,要不然前端程式會對應不到,所以在SQL命令中已使用( ident_current('資料表A')+1)先取得InsuranceID了,這樣產生的三個副本就都一致啦
我想順便取得這次的InsuranceID欄位值,方便我將InsuranceID值Update到另一個資料表去,但是我不想再下一次SQL命令啦,想到說我可以再用一個副本,然後用指令碼元件去接那個欄位,寫入變數供之後使用,這是我想到可以不用再下一次SQL命令做法,不知還有更簡單的方法嗎?
問題來了,我想說只要在指令碼元件中寫一行code就行了,結果出現如下錯誤
在 PostExecute 外部無法使用已被鎖定進行讀取和寫入的變數集合。
ReadWriteVariables的設定如下圖
指令碼元件
我的一行code如下紅字的部分,原來這樣一行是行不通的,這是錯誤示範
Public Class ScriptMainInherits UserComponent
Public Overrides Sub 輸入0_ProcessInputRow(ByVal Row As 輸入0Buffer)
Variables.InsuranceID = Row.InsuranceID.ToString
End Sub
End Class
原來BOL的在指令碼元件中使用變數有寫,擷取如下:
ReadWriteVariables 的集合只能在 PostExecute 方法中使用,才能最佳化效能並將鎖定衝突的風險降到最低。因此您無法在處理每一列資料時,直接增量封裝變數值。必須改增量區域變數值,並在處理所有的資料之後,將封裝變數值設定為 PostExecute 方法中的區域變數值。要拆成下面粉紅字那樣才行,先用區域變數接,在PostExecute方法中用封裝變數接回
Public Class ScriptMain
Inherits UserComponent
Dim v As String
Public Overrides Sub 輸入0_ProcessInputRow(ByVal Row As 輸入0Buffer)
v = Row.InsuranceID.ToString
End Sub
Public Overrides Sub PostExecute()
Variables.InsuranceID = v
End Sub
End Class
最後BOL有提到效能問題,因為我這一次只轉一筆資料,這樣用沒這困擾
0 意見:
張貼留言