SSIS-以变量的Sql当作RunTime的实际Sql
会用到这样的方法,可能性很多,例如你用是非微软牌的sql server,你用的是oracle,sybase数据库,且前提是有for ole db provider的才行
不然的话,你还是得要用datareader来源的方式,但这个冏状只会在ssis2005版发生,ssis2008可以使用ado.net来源的方式解决
但这不是我今天要介绍的重点,我今天要举的例子是
假设你的sql语法,是要用组sql的方式动态查询,亦或是你的查询字段不变,但因子查询会要用到where条件,且这个where条件又要动态给入的话,就比较适合用这种方法
虽然会麻烦些,但是可以解决问题的方法之一,可以参考看看
案例说明:假设我是用oracle,但ssis的ole db不支持 where的变量参数,因此我要再前面一开始就先组好sql给一个变量,然后把这个变量当作我下查询命令
首先拉一个”命令码工作”
然后设一个变量
sqlstr:这个变量是用来放组sql后的字符串
另外在”值”的地方,请先输入一段你自己想要查询的sql 语法
ex:
SELECT top 1 订单号码, 客户编号, 员工编号, YEAR(订单日期) as 订单日期 FROM 订货主档 WHERE (YEAR(订单日期) = 1996)
这个就是到时候真正执行的查询语法,只不过你可以先只查第一笔,因为必须在”数据流程”的”oledb 来源”可以有table schema
接下来,请在”命令码工作”按鼠标右键
若是ssis2008
在scriptlanguage的地方,可以选择你习惯的语法,有C#及vb可以选,我们选vb比较跟ssis2005一致,当然你也可以选c#
若是ssis2005,则只有vb,且是固定的,没得选
画面中的readonlyvariables指的是只能只读的变量
画面中的readwritevariables指的是可以读写的变量,我们在此填入sqlstr,因为之前我们的变量是设这个
接下来请按”编辑命令码”的按钮
接下来会开启程序编辑器,请在Main()输入以下程序
‘我先声明一个年的变量,当作我的where条件
Dim qyear As Integer = 1997
‘以下的sql跟上面所写相同,只是我拿掉top 1 ,并把过滤条件变成接变量,另外要注意的事,如果你是要的接应该是字符串,请应改为=’”+qyear+”’的方式,前申接单引号
Dim newsqlstr As String = "SELECT 订单号码, 客户编号, 员工编号, YEAR(订单日期) as 订单日期 "
newsqlstr += "FROM 订货主档 WHERE (YEAR(订单日期) = " + qyear + ") "
‘sql 组合好后,写回变量中
Dts.Variables("sqlstr").Value = newsqlstr
我上述的程序,是用在组sql字符串,如果你的是oracle的procedure,或其他数据库的sql语法,也可以用类似的方式组字符串,来达到动态sql的方式
接下来拉出一个”数据流程工作”控件
接下来在'”数据流程工作”中按鼠标右键选编辑
拉出一个”oledb 来源”
在”ole db来源”按鼠标右键选编辑
在写这篇文章的同时,我是使用sql server 2008的中文试用版,但有发现一个bug,对于中文的数据库名称,好像没有办法在ssis中使用”来自变量的sql命令”这个方式
但如果我把数据库名称改成英文的就可以了,希望在sql server 2008出来时,能处理掉这个bug
在数据存取模式中选择”来自变量的命令,在变量名称,选择我们自订的全域变量名称sqlstr
点选预览,若有看到数据的话,就表示是ok的
接下来点选”数据行”页签,如果有看到类似如下的画面的话,那就是有对应啰!字段不一定会跟我的一样
接下来就看各位后续要怎么接数据啰!
使用变量当作数据来源的用法,大致上介绍到此,有问题的欢迎留言讨论啰!
&ampamp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&ampamp;amp;amp;amp;amp;amp;amp;amp;quot;http://www.facebook.com/sharer.php&ampamp;amp;amp;amp;amp;amp;amp;amp;quot; href=&ampamp;amp;amp;amp;amp;amp;amp;amp;quot;http://www.facebook.com/sharer.php&ampamp;amp;amp;amp;amp;amp;amp;amp;quot; type=&ampamp;amp;amp;amp;amp;amp;amp;amp;quot;button_count&ampamp;amp;amp;amp;amp;amp;amp;amp;quot; data-cke-saved-name=&ampamp;amp;amp;amp;amp;amp;amp;amp;quot;fb_share&ampamp;amp;amp;amp;amp;amp;amp;amp;quot; name=&ampamp;amp;amp;amp;amp;amp;amp;amp;quot;fb_share&ampamp;amp;amp;amp;amp;amp;amp;amp;quot;&ampamp;amp;amp;amp;amp;amp;amp;amp;gt;分享&ampamp;amp;amp;amp;amp;amp;amp;amp;lt;/a&ampamp;amp;amp;amp;amp;amp;amp;amp;gt;
原文:大专栏 SSIS-以变量的Sql当作RunTime的实际Sql