我创建了一个 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
请告诉我如何正确使用它们?
如果它应该是控制流内的任务,请使用 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)。