微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
2014-10-15 16:41
387 查看
开篇介绍
前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值。我记得以前在 2008 的版本中为了弄明白这个配置,还特意测试过这个细节,获取错误并理解了这个功能。但是现在回去再次测试 2008 的版本时,发现这个功能在 2008 中其实也是错误的,把我印象中的测试结果完全给推翻了,所以到现在已经搞不清楚我当时到底是如果得出这个错误的。
疑似功能 Bug 描述
在 SSIS 包中定义了用户自定义变量 - PV_CURRENT_DATE,并且把它们放置在 ReadOnlyVariables 中,按照我们的通常理解那么这些变量在 Script Task 中应该就是只读性质的,不能赋值给他们。如果需要读写一个变量,那么这个变量就应该放到 ReadWriteVariables 中。![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/ff64505663f8eedbe3818d56a57d1ab7.png)
在代码中可以看到 PV_CURRENT_DATE 这个变量被赋值了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/0a38c7596a3897482ec8b2e319028ae4.png)
按道理应该报错的,包执行失败的,结果却是执行成功!
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/d76fdb4357107926d3f2f6fe71bc38cf.png)
那么在 SSIS 2012 中要如何解决或者描述这个问题呢? 测试一下,修改变量 PV_CURRENT_DATE 将它的 ReadOnly 属性修改为 True,标明是只读,这个时候才会出错。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/27046ecfd375279381b4dcff3753b3db.png)
通过断点调试就会发现这个错误的原因就是 : Error trying to write to a read-only variables,试图向只读的变量写值。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/1a46a8a108f77dafd7c06502bb91d853.png)
唯一能解释的通的就是在 SSIS 2012 中的 ReadOnlyVariables 列表中出现的就只能是 ReadOnly = True 的变量,在 ReadWriteVariables 是可以看到 ReadOnly = False 或者 ReadOnly = True 的所有变量。如果本意是这样的话,我觉得这种设计显得非常的别扭,并且 ReadOnlyVariables 这个很容易给人误导,让人认为是放入其中的变量在 Script Task 中就是只读的!
MSDN 论坛
我把这个问题也贴在了 MSDN 论坛 - Isit a bug - SSIS 2012 ReadOnlyVariables in Script Task doesn't work
回复帖子的两个 MVP SSISJoost 和 Visakh16 也都重现了这个问题,也认为这是一个设计上的
Bug。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/7539577514b99811074ecdfb478ba193.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/c227c9181e2217746c3ac170b7cec304.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/0647ff6bf54aac4b66c21d4500b096e0.png)
但是我最后还是自己否定了自己,只能说是疑似 Bug,但是从这个角度来考虑,也确实可能就是 By Design,以下是我的个人观点:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/d3682557758b6c768e3194894360f525.png)
![](http://blog.csdn.net/an04g4k/article/details/file:/C:/Users/ls250299/AppData/Local/YNote/data/biwork@126.com/44ec65e5be7e47829558423f9d29cc98/clipboard.png)
关于这个问题,我也提给了微软,可以访问 SSIS 2012 ReadOnlyVariables in Script Task doesn't work 来关注微软技术团队最终的确认。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/a1589dd9f8b67bad6afded45b1cb8357.png)
对于这个问题,包括上面两个非常 NB 的 MVP 以及被我挖出来的这个帖子 SSIS
Script task 'ReadOnlyVariables' 中的另外两个牛人 MVP ArthurZ 和 Reza
Raad 也同样对这一个特性持有疑似 Bug 的观点。
如果这么多人也都这么认为的话,即使不是 Bug,这个设计也是存在问题和缺陷的,因为着着实实误导了很多人。
PS
MVP Reza Raad 的代表作 《Microsoft SQL Server 2012 Integration Services: An Expert Cookbook》![](https://oscdn.geek-share.com/Uploads/Images/Content/201410/eaa681ae33e3ea4a2ef8849b1251a14c.jpg)
其它有关 Script Task 脚本任务的文章
微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件
MSDN 论坛的 BI MVP 们
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)
更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在
BIWORK 博客推荐栏中快速看到这些文章。
相关文章推荐
- 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
- 微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG
- SSIS 脚本任务处理变量
- Microsoft SQL Server 2008作业脚本中的一个小Bug
- 微软BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)
- mysql5.1 系列 关于用户授权的一个bug
- 微软BI 之SSIS 系列 - 两种将 SQL Server 数据库数据输出成 XML 文件的方法
- SSIS 脚本任务读取文件
- 微软BI 之SSIS 系列 - 通过 OLE DB 连接访问 Excel 2013 以及对不同 Sheet 页的数据处理
- shell脚本中case条件控制语句的一个bug分析
- 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念
- 微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息
- SSIS常用的包—脚本和组件任务
- 解决SSIS的脚本任务编辑器加载超慢问题
- 发现维护的自己编写linux 系统检查脚本一个bug (syslog\message)
- 微软BI 之SSIS 系列 - 通过设置 CheckPoints 检查点来增强 SSIS Package 流程的重用性
- SSIS常用的包—脚本和组件任务
- SSIS中的脚本—脚本任务中使用程序集
- 微软BI 之SSIS 系列 - 在 SSIS 中读取 SharePoint List
- 微软BI 之SSIS 系列 - 变量查询语句引起列输出顺序不一致的解决方法