【问题标题】:SSIS: Creating a variable expression but it is throwing error "DT_WSTR" and "DT_DATE" are incompatibleSSIS:创建变量表达式但抛出错误“DT_WSTR”和“DT_DATE”不兼容
【发布时间】:2016-03-07 16:39:07
【问题描述】:

我正在创建一个增量负载,它将数据从 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]+ "'"

当我运行它时它告诉我它是 NOT A VALID MONTH

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 列执行增量加载的最佳方法是什么?我的方式是更有效的方式之一,还是我可以采取其他方式?

【问题讨论】:

    标签: sql sql-server oracle date ssis


    【解决方案1】:

    您需要让您的 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 函数

    【讨论】:

    • 啊,我试试这个。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多