SSIS在Lookup Transform中使用变量

时间:2017-05-15 19:35:52

标签: sql sql-server ssis etl ssis-2012

在查找转换中,我指定了一个参考数据集,如下所示:

SELECT DISTINCT Client_ID 
FROM     dbo.CLIENT
WHERE  (ENROLLMENT_DATE >='2016-07-01') AND (DE_ENROLLMENT_DATE <='2017-06-30')

如果我想要替换硬编码的'2016-07-01''2017-06-30',有谁知道我该怎么办?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用表达式来实现此目的,只需按照以下步骤操作:

  1. 创建两个类型为string
  2. 的变量(ex @[User::strBeginDate]@[User::strEndDate]
  3. 鼠标点击DataFlow Task并按F4以显示属性标签
  4. 在属性标签上,转到表达式
  5. 您会找到[Lookup Transformation].SqlCommand
  6. 使用以下表达式

    "SELECT DISTINCT Client_ID 
    FROM     dbo.CLIENT
    WHERE  (ENROLLMENT_DATE >='" + @[User::strBeginDate] + "') AND (DE_ENROLLMENT_DATE <='" + @[User::strEndDate] + "')
    
  7. enter image description here

答案 1 :(得分:2)

在查找转换之前添加派生列转换,在此创建两个新列以从日期变量中获取月份和年份。像这样:

enter image description here

在查找转换中,使用以下查询:

SELECT 
  Client_ID
  ,YEAR(ENROLLMENT_DATE) AS ENROLLMENT_YEAR
  ,MONTH(ENROLLMENT_DATE) AS ENROLLMENT_MONTH
FROM CLIENT

然后在Lookup Transformation的Columns页面中连接您的查询,如下所示:

enter image description here

我认为您的查询中不需要DISTINCT,因为查找转换只返回它找到的第一行。