[SSIS][問題處理]升級 SSIS 封裝到 2017 時無法順利升級指令碼元件 ?

正常來說當 SSIS 封裝升級時,使用 SSDT 可以將大部分元件都可以自動完成升級,但遇到指令碼元件時,則可能會遇到一些地雷。

因為 SQL Server 2017 也出來一陣子了,這一陣子遇到一些朋友,要將 SSIS 的封裝要從舊的 SQL Server 2012,移轉到新的 SQL Server 2017。原本以為這是個簡單任務,畢竟 SSIS 從 2012 開始到 2017 之間,並沒有甚麼不相容的特殊元件,應該可以順利移轉,但沒有想到卻因此踩到地雷了。

首先我先將舊的測試專案給開啟,從 VS 2017 開起來的時候,會看到目前我們的專案是 SQL Server 2012 的版本

首先我們在專案上,按下滑鼠右鍵選擇「屬性」,先將專案的目標版本從 SQL Server 2012 → SQL Server 2017

按下確定後,會出現一段提示訊息,按下 YES 這樣就可以完成專案升級 ( 但也只有升級專案,封裝還沒有升級喔 )。

接下來我們在 SSIS 封裝的節點上,按下滑鼠右鍵,選擇「升級所有封裝」,來將我們專案下的封裝給升級。

接下來就會有個升級精靈,看起來應該一步一步做下去就可以完成升級,選擇「Next

選擇要升級的封裝,按下「Next

前面步驟基本上都是下一步就可以了,但如果您的封裝有使用到指令碼元件的話,就應該就會跟我一樣,再轉換最後會出現如下的警告訊息,看起來需要人介入去處理了。


因此我們來開啟封裝看看,到底是寫了甚麼到底出問題了呢 ? 因此我們選擇到我們的指令碼元件,選擇「編輯」之後,開啟出視窗之後,按下「編輯指令碼

當開啟之後,會看到指令碼有一些錯誤,但是明明我們的指令碼元件裡面幾乎都沒有寫任何東西,因此看起來應該不會是原本的指令出問題,所以我們就看一下「方案總管」,當開啟之後,可以看到參考的部分有些警告訊息

所以我們就先手動將這兩個有問題的參考給移除

接著我們在「參考」的節點上,按下「加入參考

出現畫面之後,按下下方「瀏覽

將目錄切換到「C:\Program Files (x86)\Microsoft Visual Studio\2017\SQL\Common7\IDE\PublicAssemblies\SSIS\140\」,選擇「Microsoft.SqlServer.ManagedDTS.dll」和「Microsoft.SqlServer.ScriptTask.dll」​

當上述調整完畢之後,指令碼元件看起來就正常了,也可以正常執行了。