SSIS-以变量的Sql当作RunTime的实际Sql

♀尐吖头ヾ 提交于 2019-11-29 11:21:29

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!