开篇介绍

前些天自己在整理 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 论坛

回复帖子的两个 MVP SSISJoost 和 Visakh16 也都重现了这个问题,也认为这是一个设计上的 Bug。
但是我最后还是自己否定了自己,只能说是疑似 Bug,但是从这个角度来考虑,也确实可能就是 By Design,以下是我的个人观点: 
关于这个问题,我也提给了微软,可以访问  SSIS 2012 ReadOnlyVariables in Script Task doesn't work 来关注微软技术团队最终的确认。
对于这个问题,包括上面两个非常 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》

其它有关 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 的。

更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)  如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。

微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug的更多相关文章

  1. 微软BI 之SSIS 系列 - 再谈Lookup 缓存

    开篇介绍 关于 Lookup 的缓存其实在之前的一篇文章中已经提到了 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache ...

  2. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  3. 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据

    开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...

  4. 微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件

    原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent ...

  5. 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

    开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...

  6. 微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive

    开篇介绍 前几天碰到这样的一个问题,在 Lookup 中如何设置大小写不敏感比较,即如何在 Lookup 中的字符串比较时不区分大小写? 实际上就这个问题已经有很多人提给微软了,但是得到的结果就是 C ...

  7. 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧

    案例背景与需求介绍 之前做过一个美国的医疗保险的项目,保险提供商有大量的文件需要发送给比如像银行,医疗协会,第三方服务商等.比如像与银行交互的 ACH 文件,传送给协会的 ACH Credit 等文件 ...

  8. 微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG

    开篇介绍 这是今天在帮别人看一个 2008R2 版本的项目时发现的一个 Bug,这个 Bug 在 SQL SERVER 2012 有的版本中可能已经解决,但在论坛上看到有的仍然存在. 在 SQL SE ...

  9. 微软BI 之SSIS 系列 - 通过 OLE DB 连接访问 Excel 2013 以及对不同 Sheet 页的数据处理

    文章更新历史 2014年9月7日 - 加入了部分更新内容,在文章最后提到了关于不同 Office Excel 版本间的连接问题. 开篇介绍 这篇文章主要总结在 SSIS 中访问和处理 Excel 数据 ...

随机推荐

  1. Sql 数据引擎中删除用户名、密码信息

    SQl版本:Microsoft SQL Server 2008 R2 系统:Windows Server 2008 R2 Enterprise 删除文件为:SqlStudio.bin 删除星系路径:C ...

  2. JStrom的zk数据

    /jstorm/masterlock 用于LeaderSelector的锁. /jstorm/master get /jstorm/master localhost.localdomain:7627 ...

  3. IE 下JS和CSS 阻塞后面内容总结

    总结: 1.  CSS 都是可以并行下载的. 2.  IE6 和 IE7   JS 不能并行下载,CSS 和 JS 阻塞后面内容下载. 3.  IE8   JS 还是会阻塞图片下载 开始改变加载模式, ...

  4. mysql分区查询

    SELECT *FROM INFORMATION_SCHEMA.partitions WHERE table_name='表名' and table_schema='数据库名'

  5. ORACLE 分组之后容易被忽略的bug

    COL_2 COL_321       3123       31 如上表数据 前台显示显示需要把COL_2的21和23转换成中文 ‘整机’ 最开始如下编写 SELECT t.col_3, CASE ...

  6. spark textFile 困惑与解释

    在编写spark测试应用时, 会用到sc.textFile(path, partition) 当配置为spark分布式集群时,当你读取本地文件作为输入时, 需要将文件存放在每台work节点上. 这时会 ...

  7. 定位frame 中的对象

    在web 应用中经常会出现frame 嵌套的应用,假设页面上有A.B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B.switch_to_frame 方法可以把当前定位 ...

  8. Java如何将html转以后的字符转化成正常显示的字符

    String str = "“!@#¥%……&——+”";//“!@#¥%……&——+”  中文状态下的标点符号,进过html转换了 String convStr ...

  9. 20145225《Java程序设计》 实验五 Java网络编程及安全

    20145225<Java程序设计> 实验五 Java网络编程及安全 实验报告 一.实验内容 基于Java Socket实现安全传输. 基于TCP实现客户端和服务器,结对编程一人负责客户端 ...

  10. 参数(parameter)和属性(Attribute)的区别

    参数(parameter)和属性(Attribute)的区别 区别: 来源不同: 参数(parameter)是从客户端(浏览器)中由用户提供的,若是GET方法是从URL中 提供的,若是POST方法是从 ...