如何在SSIS中使用Package变量放置where条件

时间:2011-10-10 13:01:14

标签: ssis

我创建了一个ssis包 我需要运行以下查询

Insert into  mydata.dbo.MonthEndCDSSpreadCalc(Date,CompanyName)
SELECT    Date, CompanyName
FROM       mydata.dbo.UpdateNAV
WHERE     (Date = @[User::Date]) AND (PortfolioId = @[User::PortfolioId]) AND (SecurityType in (@[User::SecurityType]))

但在上面我收到用户变量的错误。 将查询运行到SQL Task以上 请告诉我如何正确使用它们?

1 个答案:

答案 0 :(得分:2)

如果它应该是控制流内的任务,请使用ExecuteSQL任务。 如果它应该是数据流内的任务,请使用OleDbCommand。

此外,无论您选择哪种方式,都应更改查询以使用适当的参数语法。请查看BOL for ExecuteSQL任务和OleDbCommand以获取详细说明。

例如,如果您在oledbcommand中使用oledb连接管理器,您应该使用?因为那是oledb参数占位符:

Insert into  mydata.dbo.MonthEndCDSSpreadCalc(Date,CompanyName)
SELECT    Date, CompanyName
FROM       mydata.dbo.UpdateNAV
WHERE     (Date = ?) AND (PortfolioId = ?) AND (SecurityType in ?)

然后转到参数选项卡并将参数映射到SSIS变量。请注意,SSIS按照您列出的顺序将SSIS变量映射到查询中的问号。

注意:如果你有很多行,这个包会很慢。最好不要逐行处理,而是更改包的逻辑,使其适用于集合(例如,在数据流中分配值并使用oledb目标将数据插入MonthEndCDSSpreadCalc)。