開篇介紹
前些天本身在整理 SSIS 2012 資料的時候發現了一個功能設計上的疑似Bug,在 Script Task 中是能夠給只讀列表中的變量賦值。我記得之前在 2008 的版本中爲了弄明白這個配置,還特地測試過這個細節,獲取錯誤並理解了這個功能。可是如今回去再次測試 2008 的版本時,發現這個功能在 2008 中其實也是錯誤的,把我印象中的測試結果徹底給推翻了,因此到如今已經搞不清楚我當時究竟是若是得出這個錯誤的。
疑似功能 Bug 描述
在 SSIS 包中定義了用戶自定義變量 - PV_CURRENT_DATE,而且把它們放置在 ReadOnlyVariables 中,按照咱們的一般理解那麼這些變量在 Script Task 中應該就是隻讀性質的,不能賦值給他們。若是須要讀寫一個變量,那麼這個變量就應該放到 ReadWriteVariables 中。
在代碼中能夠看到 PV_CURRENT_DATE 這個變量被賦值了。
按道理應該報錯的,包執行失敗的,結果倒是執行成功!
那麼在 SSIS 2012 中要如何解決或者描述這個問題呢? 測試一下,修改變量 PV_CURRENT_DATE 將它的 ReadOnly 屬性修改成 True,標明是隻讀,這個時候纔會出錯。
經過斷點調試就會發現這個錯誤的緣由就是 : Error trying to write to a read-only variables,試圖向只讀的變量寫值。
惟一能解釋的通的就是在 SSIS 2012 中的 ReadOnlyVariables 列表中出現的就只能是 ReadOnly = True 的變量,在 ReadWriteVariables 是能夠看到 ReadOnly = False 或者 ReadOnly = True 的全部變量。若是本意是這樣的話,我以爲這種設計顯得很是的彆扭,而且 ReadOnlyVariables 這個很容易給人誤導,讓人認爲是放入其中的變量在 Script Task 中就是隻讀的!
MSDN 論壇
可是我最後仍是本身否認了本身,只能說是疑似 Bug,可是從這個角度來考慮,也確實可能就是 By Design,如下是個人我的觀點:
若是這麼多人也都這麼認爲的話,即便不是 Bug,這個設計也是存在問題和缺陷的,由於着着實實誤導了不少人。
PS
MVP Reza Raad 的表明做 《Microsoft SQL Server 2012 Integration Services: An Expert Cookbook》
其它有關 Script Task 腳本任務的文章
- ArthurZ (MVP,MCDBA, MCAD, MCTS and MCITP)
- Reza Raad (MVP, MCP, MCTS and MCI《Microsoft SQL Server 2012 Integration Services: An Expert Cookbook》做者)
- SSISJoost (MVP, SSIS)
- Visakh16 (MVP, SSIS,SSAS,SSRS)
微軟已經確認這是一個 Bug
更新自 2014年12月15日,看到微軟已經肯定了這是一個 Bug,而且從 2008 R2 版本中就存在這個 Bug 的。html


更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 若是以爲這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。sql