如何在数据流任务SSIS 2008 r2中传递变量

How to pass variables in data flow task SSIS 2008 r2

我正在尝试将数据从一个 OLEDB 连接传输到另一个 OLEDB。 SSIS 和 SQL 服务器均为 2008 R2。我想使用一个变量来加载每年的数据(2014 年、2015 年等等)。 SQL 源中的查询是

DECLARE @year int set @year = ?
SELECT [ServiceActivities]
      ,[ServiceID]
      ,[ClientID]
      ,[WorkerID]
      ,[CostCode] 
      ,[ProviderID]
      ,[CostUnit]
      ,[Units]
      ,[OccurrenceDate]
FROM [dbo].[PlannedAppointmentsView] 
WHERE datepart (yy, OccurrenceDate) = @year

但是当我点击“参数”按钮时它抛出错误,

我创建了一个变量,不确定是否需要。我怎样才能自动化这个过程来改变每年到今年的变量?谢谢大家。

尽量避免声明变量,直接将?放在需要传递参数的地方即可。

SELECT [ServiceActivities]
  ,[ServiceID]
  ,[ClientID]
  ,[WorkerID]
  ,[CostCode] 
  ,[ProviderID]
  ,[CostUnit]
  ,[Units]
  ,[OccurrenceDate]
FROM [dbo].[PlannedAppointmentsView] 
WHERE datepart (yy, OccurrenceDate) = ?

如果仍然无法正常工作,那么您必须按照此错误消息中给您的建议进行操作。

只需创建一个 String 类型的变量(例如:strQuery),转到“属性”选项卡,将 Evaluate as expression 属性 更改为 True,然后将与此变量类似的表达式:

"SELECT [ServiceActivities]
  ,[ServiceID]
  ,[ClientID]
  ,[WorkerID]
  ,[CostCode] 
  ,[ProviderID]
  ,[CostUnit]
  ,[Units]
  ,[OccurrenceDate]
FROM [dbo].[PlannedAppointmentsView] 
WHERE datepart (yy, OccurrenceDate) = " + (DT_WSTR,50)@[User::year]

然后在 OLEDB Source select SQL command from variable 选项中选择这个变量

你应该这样写

declare @Year int = ?

然后按 Parameters 按钮和 select 您想要的参数。然后就可以了

但是正确的做法就像@Hadi 在他的第一条评论中写的那样。