SSIS:创建一个变量表达式,但它抛出了错误" DT_WSTR"和" DT_DATE"不兼容

时间:2016-03-07 16:39:07

标签: sql sql-server oracle date ssis

我正在创建一个增量加载,将数据从 ORACLE 提取到 SQL 服务器。增量加载将基于 MODIFIED_DATE 列。

我创建了一个结果集变量,用于存储目标表中的 MAX modified_date 。因此,引擎只会检查 MODIFIED_DATES 的行更大,并执行查找以查看是否需要添加,更新或删除行。

所以我有 MAX MODIFIED DATE RESULT SET ,我还创建了另一个容纳 SOURCE QUERY 的变量,它将有一个 WHERE 子句,用于查看 MODIFIED_DATE 列是否大于 MAX MODIFIED_DATE变量

示例:

Select column_name,column_name
From table
Where modified_date > '"+   @[User::LastModifiedDate]+ "'"

它给我一个错误:

  

数据类型" DT_WSTR"和" DT_DATE"与二元运算符" +"不兼容。操作数类型无法隐式转换为操作的兼容类型。要执行此操作,需要使用强制转换运算符显式转换一个或两个操作数。

现在,我已经做了大量的搜索,但我似乎无法找到一种方法来做到这一点。我在网上找到的唯一解决方案是在变量前面添加 ADD A(DT_WSTR,25),这会导致变量表达式被评估,这是我可以获得变量表达式来评估的唯一方法。

示例:

(DT_WSTR, 25)  @[User::LastModifiedDate]+ "'"

当我运行它时,它告诉我它没有效率

DESTINATION 表中的MODIFIED_DATE列位于SQL Server中,它有一个DataTime作为日期类型,其内容如下:

2008-06-10 22:22:25.000
YYYY-MM-DD    

oracle中 SOURCE 表中的MODIFIED_DATE列读取如下:

6/10/2008 10:22:25 PM
MM/DD/YY HH:MM:SS 

我怎么能解决这个问题?您还认为基于MODIFIED_DATE列执行增量加载的最佳方法是什么?我的方式是更有效的方式之一还是我可以采取另一种方式?

1 个答案:

答案 0 :(得分:0)

您需要让SSIS组件调用以下语句:

Select column_name,column_name
From table
Where modified_date > to_date('whateverformat','"+ (DT_WSTR,25)@[User::LastModifiedDate]+ "')"

问题是你纠结了字符串与日期。您的lastmodifieddate必须是表达式构建器才能运行的字符串,但我怀疑Oracle期望将modified_date作为日期,所以只需使用to_date函数