首页 > 代码库 > [小技巧]初次接触 SSIS Package 的一点总结
[小技巧]初次接触 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。
[小技巧]初次接触 SSIS Package 的一点总结