
SSIS(SQL Server Integration Services,SQL Server整合服务)变量分分为两种,一种是系统变量,一种用户定义的变量。系统变量包括有关包、容器、任务或事件处理程序的非常有用的信息。例如,在运行时,MachineName系统变量包含运行包含的计算机的名称,StartTime变量包开始运行的时间。系统变量是只读的。在SSIS中,用户变量是用户在开发的过程中根据需要申明的变量。用户变量可以使用在脚本中,在由优先约束、For循环容器、派生列转换和条件性拆分转换使用的表达式中,以及在更新属性值的属性表达式中。
在各种编程语言中申明的变量一般情况下都会有作用范围的,SSIS变量也不例外,SSIS变量也是有作用范围的。根据作用范围分类,变量分为包变量和组件变量。包变量在包任何一个组件中都可以调用,组件变量只能够在声明变量的组件中有效。在变量的窗口中可以看到变量的作用域。
可以看到i变量的作用域是整个Package1包,而myconfig变量作用域是数据流任务组件。
二、SSIS用户变量的声明、赋值、使用
1、申明变量
申明变量是非常简单、如果你要申明包变量,只要单击控制流选项卡,然后在包开发区域空白处单击右键选择变量命令,或者新建变量按钮就新建一个变量,输入名称,选择数据类型,赋初值就完成了。
如果要声明某数据流任务组件使用的变量,只要双击该数据流任务组件,在流控制控制选项卡空白的地方单击右键选择变量命名,在变量窗口中新建一个变量命令,在变量窗口中新建一个变量,这时变量的作用域就是你选择的流任务组件。
2、赋值
在实际开发中,除了在变量声明的时候给变量赋值外,还有两种方式,一种是通过执行SQL任务组件返回值的方式给变量赋值,一种是通过脚本组件来给变量赋值。
在执行SQL任务组件方法是先设置好组件的数据库连接属性,然后输入从数据库取数据的SQL语句,设置组件返回的结果集为单行。在结果集界面中单击“新建”,在结果集那一列输入你刚才SQL返回列的名称,在变量名称列选择你要赋值的变量
图中红色方框中的SQL语句非常简单,返回单行,结果是1。在图4中,将返回的result列的一行赋值给用户变量i。
利用脚本组件赋值变量比较简单,只需要设置脚本组件的ReadOnlyvariable或者ReadWriteVariable,将变量的名称设置他们的值(多个变量以逗号分割),它们的区别是前者在脚本组件只能够读,或者可以读写。然后在脚本组件中通过
Dts.Varables("变量名称").Value=值
3、变量的使用
变量在ssis中使用的地方很多,笔者介绍两个典型的应用。
(1) 执行 SQL 任务组件的参数
假定申明了一个日期类型变量StartDate,用户需要通过从某个表中选择在StartDate日期之前的数据,这个时候需要将StartDate作为参数传给执行 SQL 任务组件。在执行 SQL 任务组件输入SQL的地方输入如下命令语句:
SELECT * FROM TABLE_a WHERE 日期字段 <?
然后在参数据映射界面新增映射,在变量名称列选择用户变量StartDate,选择类型为DATE,在参数名称列输入给参数取的名称。这样就可以将StartDate变量传给SQL任务组件的SQL语句了。
(2) 在脚本组件中赋值
可以在脚本组件中通过Dts.Variables("i").Value = 1方式赋值给变量,也可以通过这种方式来使用变量。比如Dts.Variables("other_variable").Value = Dts.Variables("i").Value+1,这个语句是可以在脚本组件中执行的,将i变量加1后赋值给另外一个变量。
经过各种折腾,终于解决了这个问题。参考了各论坛的方案,解决办法如下:1.格式化电脑,重装 *** 作系统和SQL Server 2012。因为看到有一种说法是64位的SQL Server安装的路径中有program file (X86),这个括号影响oracle客户端工作。在未重做系统前,卸载重装不能改变这个安装路径,可能是卸不干净的问题。重装的时候指定了文件路径和共享路径为c:\sqlserver,但是在运行时,发现visual studio2010的实际路径仍在program file (X86)下。
安装oracle 10g 32位客户端,再安装oracle10g 64位客户端,有顺序要求。在安装前要修改一下文件,否则系统报错,装不上。
~ 编辑安装包内文件 database/stage/prereq/db/refhost.xml
增加下面节点
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
~ 编辑安装包内文件database/install/oraparam.ini
找到小节 在下面的第二行中增加windows版本6.1,如下面所示
Windows=4.0,5.0,5.1,5.2,6.1
至此,在net manager中建立和oracle的连接,测试是连通的,但是在SSIS中连不上。
3.安装oralce 11g 32位,然后安装oracle 11g64位。安装完成后,修改注册表。
(1) For both 32-bit and 64-bit installations, open up REGEDIT and make the following registry changes:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC\MTxOCI
OracleOciLib contains the value oci.dll
OracleSqlLib contains the value orasql11.dll (old value is SQLLib80.dll)
OracleXaLib contains the value oraclient11.dll (old value is xa80.dll)
(2) For 64-bit installations only:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\MSDTC\MTxOCI
OracleOciLib contains the value oci.dll
OracleSqlLib contains the value orasql11.dll (old value is SQLLib80.dll)
OracleXaLib contains the value oraclient11.dll (old value is xa80.dll)
(3) You must reboot your server for the changes to apply. Reboot your server.
参考文章 http://social.msdn.microsoft.c ... -2012
然后把在oracle 10g下的TNSNAME文件拷贝到各个版本的客户端下。
在SSIS project name上右键选属性,在debuging下,把运行64位改成false。
最后,抱着如果不成功,就把电脑砸了的心情,在SSIS中测试连接到oracle数据库,成功了!
菜单里面有选中当前ssis包,然后菜单选择包配置,主要是对包里面的连接串,变量和文件路径等进行配置,选择好后会生成对应的ssisconfig文件,里面有你配置的参数等,好处就是不用每次改包,直接修改配置文件即可部署。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)