2012-04-18 49 views
1

今天剛剛開始使用BIDS和SSIS時,我就像他們來的那樣綠。我想創建一個表並從Access數據文件導入一些數據。我得到了這個工作,但我必須不斷刪除部分結果,我認爲把它全部包裝在交易中將是一個好主意。我沒有運行MSDTC,所以我想我只會使用手動事務。我嘗試添加包含BEGIN TRANS的Execute T-SQL Task,然後再添加兩個COMMIT TRANS和一個ROLLBACK Trans。如果數據流任務失敗,它會進行回滾,否則它會提交。當它達成提交時,它總是說沒有開始交易。包裹看起來像這樣。這是支持,我只是想設置一些神奇的屬性,使其工作?如何在BIDS和IIS中使用手動T-SQL事務?

enter image description here

+1

http://www.mssqltips.com/sqlservertip/1585/how-to-use-transactions-in-sql-server-integration-services-ssis/ – 2012-04-18 06:24:57

+0

感謝您的鏈接,總是很好知道在哪裏可以找到提示。不幸的是,這一個是關於使用內置的事務支持,需要MSDTC,正如我在我的問題中提到,我沒有運行。我仍然會花更多的時間閱讀這些內容,只是爲了看看我還能學到什麼。 – Tod 2012-04-18 17:15:05

回答

1

由於這些任務是獨立運作的,這就是爲什麼你的開始/回滾/提交將無法工作。如果您只想刪除表中的所有數據,請在數據流任務失敗時在該表上運行TRUNCATE語句。 當像這樣加載時,我通常清理表並每次填充它以測試數據流任務。

+0

查看我對HLGEM的回覆,我希望避免截斷表格並重新開始。我認爲我要做的是在完成每個源代碼後分離並複製數據庫。這樣,如果第六個源代碼搞砸了,我可以從最近的一個保存點開始。 – Tod 2012-04-20 17:05:46

+0

如何將源數據作爲輸入文件並使用存儲過程進行批量插入?這些可以用交易包裝。或者,如果可以的話,您可以將不同的數據源加載到不同的登臺表中。這樣你就知道哪一個失敗了,可以重新處理它。一旦所有加載成功完成,您可以將所有臨時表合併到單個數據表中。 – zhanif 2012-04-25 09:11:58

+0

嗨,使用OLE DB連接管理器的RetainSameConnection屬性。我遇到了這篇文章,它回答了你的問題:http://consultingblogs.emc.com/jamiethomson/archive/2005/08/20/SSIS-Nugget_3A00_-RainainSameConnection-property-of-the-OLE-DB-Connection-Manager。 aspx – zhanif 2012-04-27 12:32:40

1

好的,這裏是我如何評價這件事的建議。我通常會轉換數據,以便在執行數據流加載到產品之前不需要回滾。所以我加載到一個臨時表和tehn或者清理數據或者刪除不良記錄,或者檢查是否存在某個會導致回滾的事件,然後再考慮在生產表中添加一些內容。如果你有驚人的成績,他們應該在你投入生產之前就發生。如果你只是想找到並處理這些商品化的記錄,暫存表將允許你這樣做,將不良數據發送到例外表等,所有這些都不會產生干擾。當你掌握最後的數據流時,每個人都知道這一點很好。我們進行數千次進口,從不需要在產品級別進行回滾。

如果你確實真的想要在產品級別回滾,那麼可以在執行SQl任務時使用數據流來填充登臺表,這是一個存儲過程,具有顯式事務並嘗試catch塊以便在出現錯誤時回滾。

+0

我正在做一個臨時數據庫中的所有東西,這是我想要做的簡單示例。我將在多個來源上多次運行一些SSIS任務。如果在完成5個源代碼之後,我發現第6個代碼有問題,如果我可以避免重新開始,但看起來也許我必須爲此擁有MSDTC。不知道我明白爲什麼我不能打開一個TRANS,然後COMMIT或回滾許多任務,但似乎並不是這個工具打算如何使用。 – Tod 2012-04-20 17:04:18