开篇介绍
前些天本身在整理 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