今天在執行SQL Procedure 時遇到的問題…
由於 OLE DB Provider 'SQLOLEDB' 無法開始分散式交易,所以無法執行此操作。
1 =000103=2008/01=0
[OLE/DB provider returned message: 在指定異動協調員中無法編列新異動。]
找出問題…
因為程式很短,在經過不斷的測試後,發現是和遠端連線的那台SERVER有關,
但是單獨執行那段語法(在寫入另一個Procedure中)又是ok的…
所以 達人森 建議我,一段一段的執行,來找出問題…
所以呢…整個程式就被我點的一片綠綠的囉…
最後才發現原來是錯在
Transaction 這呢…經過 達人森 的解釋是…因為是在本機上做的Transaction Log
所以無法遠端去RollBack…
建議的作法如下
1.改寫程式為一次即可執行完畢,如此就不須要做Transaction 了
(依據我的程式上來看呢,就是要用PIVOT來解
2.將Procedure放在遠端的的那台主機上,然後利用本機來exec 囉
3.手動做Rollback...
4.不要做 Rollback
尤於我的程式不是挺重要的…所以選擇了第四點…
程式內容
------------------------------------------------------------------------------------------------------------
alter PROCEDURE Tmp_20081101
AS
Declare
@ErrorSave int,
@ErrMsg char(50), /*記錄錯誤訊息*/
@Content varchar(1000),
@Subject varchar(100),
@SystemDate char(10), /*系統日*/
@ExecuteTime datetime, /*Batch執行時間*/
@EmpID CHAR(6),
@InsertCnt int,
@m1 int,
@m2 int,
@m3 int,
@m4 int,
@m5 int,
@m6 int,
@m7 int,
@m8 int,
@m9 int,
@m10 int,
@m11 int,
@m12 int,
@DateY char(4),
@DateYM char(7),
@int int,
@Hour int,
@RecCnt int