我创建了一个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
以上
请告诉我如何正确使用它们?
答案 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)。