我正在创建一个增量加载,将数据从 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
列执行增量加载的最佳方法是什么?我的方式是更有效的方式之一还是我可以采取另一种方式?
答案 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函数