2

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

我需要附加具有字段 GPMTADDT>(yesterday date) 的新记录,例如,如果今天 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)

我确定我缺少一些简单的东西,我们将不胜感激。

谢谢!

4

2 回答 2

1

你有没有尝试过:

SELECT PARTICIP.*
FROM PARTICIP
WHERE GPMTADDT > DATEADD(dd, -1, GETDATE())
于 2012-10-02T21:20:21.743 回答
0

您没有提到您的数据源实际上是什么,但您尝试过的 SQL 语法中似乎有几个错误。例如,第一个查询应该在日期周围有单引号,最后一个应该将参数MAX()放在括号中等。

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

  1. 如果您可以在源本身中生成值,请不要使用参数;这就是您在上一个示例中尝试执行的操作以及 Jeff 的建议
  2. 使用 SSIS 表达式SqlCommand和 SSIS 变量一起设置连接对象的属性(如此所述)
  3. 作为 #2 的替代方法,使用脚本任务构建完整的SELECT查询,将其分配给 SSIS 变量,然后使用该变量作为SqlCommand

就我个人而言,我会说选项 1 是最简单的,但如果无法从源系统中访问变量,当然并不总是可行的。2 和 3 是同一解决方案的变体,但我更喜欢 3,因为我发现编写脚本比使用表达式更容易。

于 2012-10-02T21:27:50.360 回答