[小技巧]初次接触 SSIS Package 的一点总结

1 动态改变数据源

  package从创建到调试到测试到生产环境,往往需要运行在不同的服务器上。我们可以定义Environment和Server两个变量,一个用于改变 Server,一个用于接收实际Server的值。运行于不同的环境时,只用改一个Environment变量的值,Server及数据库连接就会随之改 变。

    a. 定义Environment和Server变量

    b.方法1:Server变量的EvaluateAsExpression设置为true,表达式填写为:       

@[User::Environment]=="DEV"?"sqlServer\\dev":
(@[User::Environment]=="TEST"?"sqlServer\\test":
(@[User::Environment]=="PROD"?"sqlServer\\prod":"Unassigned"
))

   b.方法2:在package开始前,放一个Sql执行任务(连接类型设置为ADO.NET),写上类似语句:

Select @Server = Server from PackageAdmin where Environment=@Environment && ApplicationName=@ApplicationName

    然后给这个task添加必要的参数映射。这样可以根据数据库的配置,来动态改变其不同环境对应的DB Server。

    c. 将连接对象的Expression中的ServerName绑定为Server变量。

 

2 OLE DB SQL Task

    当Sql Task连接类型为OLE DB类型时,参数的映射和使用都将不同。

    映射:参数的参数名不再是@XXX,而应该是其在sql语句中对应的序号。

        

    使用:

        a. 不再是where Server=@Server, 而是 Server = ?。 问号按出现顺序和参数映射表中的参数名对应。

        b. Ole db存储过程使用命名参数: exec xxx_sp @server=? @environment=?

 

3 动态脚本

    如果想根据不同的情况,创建不同表或者将数据插入不同表,可以利用将Sql Task的Expressions中的SqlStatementSource绑定到动态语句,如

表达式填写为:

 

"create table [dbo].["+@[User::TargetTable]+"] ..."

这样,sql task的sql语句,将根据你的表达式动态生成,你可以充分利用变量增加程序的灵活性。

 

如果同一语句在一个package中出现多次,你还可以直接将该语句绑定到EvaluateAsExpression为true的一个新变量中,然后将新变量绑定到整个SqlStatementSource属性中。

 

4 Foreach Loop 的一个小Bug

    最开始的时候,ForeachLoop的选项出现在File上,但下面的编辑界面显示不正确。需要改变下选项再改回File。

posted @ 2014-09-11 14:44  Caption  阅读(905)  评论(0编辑  收藏  举报