开篇介绍

前些天自己在整理 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. 8.3 H5学习笔记

    隐藏域 <form action="" method="post" enctype="multipart/form-data"> ...

  2. AndroidStudio调试APP

    AndroidStudio调试APP 电脑用数据线连上手机 开启手机的开发者模式 注:通常连续狂点手机的版本号即可显示出开发者选项,然后进入菜单,勾选开发者选项.USB调试. 给程序加断点 单击调试按 ...

  3. POJ 1661 Help Jimmy LIS DP

    http://poj.org/problem?id=1661 对板按高度排序后. dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息. O(n^2)LIS: 唯一的麻烦就是 ...

  4. UIScrollViewDelegate

    一.执行顺序:(scrollView加后面的)willBeginDragging         // 将要开始拖拽,手指已经放在view上并准备拖动的那一刻 DidScroll           ...

  5. [题解]poj 1274 The Prefect Stall

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22736   Accepted: 10144 Description Far ...

  6. git 一般的使用操作

    1.先在github上建立自己的repository,取名为yourRepo 2.创建本地库 ssh -T git@github.com # 在初始化版本库之前,先要确认认证的公钥是否正确 git i ...

  7. Convert HTML Entities

    function convert(str) { // :) //return str; var HTML_Entities = { '&':'&', '<':'<', '& ...

  8. mysql学习-windows下绿色版mysql安装问题解决办法

    1.下载绿色版mysql 从该地址http://dev.mysql.com/downloads/mysql/ 中选择windows的版本,选择下载. 2.将下载的压缩包解压. 3.将根目录下的my-d ...

  9. MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  10. 解决 label 多行间距

    使用. 一个是间距,一个是行高,但是鉴于多行,都写的话,就相当于双倍行高了.我就用行高代替间距. self.textLabel.attributedText = [self getAttributed ...