带参数的SSIS流程ADO.net源任务

时间:2012-10-02 20:15:19

标签: ado.net ssis getdate

我正在使用ADO.NET源将数据从ODBC服务器传送到我的SQL。 我使用导入和导出向导来创建我的数据流任务。

我需要添加包含字段GPMTADDT>的新记录(昨天日期) 例如,如果今天20121002,以下查询完美地运行:

SELECT  PARTICIP.* 
FROM PARTICIP
WHERE GPMTADDT > 20121001

我试过了:

SELECT  PARTICIP.* 
FROM PARTICIP
WHERE GPMTADDT > Format(now(),"yyyymmdd")

但它不起作用,服务器将“格式”视为列。 我尝试创建变量@date

SELECT  PARTICIP.* 
FROM PARTICIP
WHERE GPMTADDT > @date

服务器再次拒绝了“@”。

Also tried:
SELECT  PARTICIP.* 
FROM PARTICIP
WHERE GPMTADDT > (SELECT MAX PARTICIP.GPMTADDT FROM PARTICIP)

我确信我遗漏了一些简单的东西,非常感谢帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

你试过了吗?

SELECT PARTICIP.*
FROM PARTICIP
WHERE GPMTADDT > DATEADD(dd, -1, GETDATE())

答案 1 :(得分:0)

您尚未提及数据源的实际内容,但您尝试过的SQL语法中似乎存在多个错误。例如第一个查询应该在日期周围有单引号,最后一个应该将参数放在括号中的MAX()等。

但是,为了尝试回答您的基本问题,ADO.NET源代码不支持参数,与OLE DB不同。一些可能的解决方案是:

  1. 如果您可以在源本身中生成值,请不要使用参数;这是你在上一个例子中想要做的以及Jeff建议的内容
  2. 使用SSIS表达式设置连接对象的SqlCommand属性以及SSIS变量(如所述here
  3. 作为#2的替代方法,使用脚本任务构建完整的SELECT查询,将其分配给SSIS变量,然后将该变量用作SqlCommand
  4. 就我个人而言,如果无法从源系统中访问变量,那么选项1是最简单的,但当然并不总是可行。 2和3是相同解决方案的变体,但我更喜欢3,因为我发现编写脚本比使用表达式更容易。