【问题标题】:SQL Server Job Expression for Variable Failed Evaluation变量评估失败的 SQL Server 作业表达式
【发布时间】:2019-06-26 20:48:35
【问题描述】:

我有一个 SSIS 包在本地运行时没有错误。然后将其部署到目录并在 SQL 代理作业中运行。从功能上讲,作业运行正常,所有数据都在它应该在的位置,但它总是会抛出这个错误:

变量“TextMaxDate”的表达式评估失败。表达式中有错误。

我找不到更有意义的消息。 SSIS 包有三个变量...

  1. 文本最大日期

    • 数据类型 = DateTime
    • 表达式 = @[User::TextMaxDate]
  2. TextSQL_Content

    • 数据类型 = String
    • 表达式 = "SELECT CREATED_DATE, ID, TEXT FROM SRC_SCHEMA.SRC_TABLE_1 WHERE CREATED_DATE BETWEEN '" + (DT_STR, 12, 1252)(DT_DBDATE) DATEADD("day",1,(DT_DBDATE)@[User::TextMaxDate]) + "' AND '" + (DT_STR, 25, 1252) (DT_DBDATE) DATEADD( "day", - 1 , (DT_DBDATE) GETDATE() ) + "'"
  3. TextSQL_NoContent

    • 数据类型 = String
    • 表达式 = "SELECT ID, CREATED, CREATED_BY, TEXT FROM SRC_SCHEMA.SRC_TABLE_1 WHERE CREATED_DATE BETWEEN '" + (DT_STR, 12, 1252)(DT_DBDATE) DATEADD("day",1,(DT_DBDATE)@[User::TextMaxDate]) + "' AND '" + (DT_STR, 25, 1252) (DT_DBDATE) DATEADD( "day", - 1 , (DT_DBDATE) GETDATE() ) + "'"

并遵循这个流程......

  1. 执行 SQL 任务

    • SQLStatement 设置为select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1
    • 结果集将结果名称设置为MaxDate,将变量名称设置为User::TextMaxDate
  2. 数据流任务(Oracle Attunity 驱动程序)

    • 在表达式下...[Oracle Source].[SqlCommand] 设置为 @[User::TextSQL_NoContent]
    • 将数据加载到 DEST_SCHEMA.TABLE_1 中,但不映射 TEXT 列,因此每个插入的记录都为空。
  3. 数据流任务(OLE DB 源代码编辑器)

    • 数据访问模式设置为SQL command from variable
    • 变量名称设置为User::TextSQL_Content
    • 将数据加载到 DEST_SCHEMA.TABLE_2
  4. 执行 SQL 任务

    • SQLStatement 设置为UPDATE DEST_SCHEMA.TABLE_1 SET DEST_SCHEMA.TABLE_1.TEXT b.TEXT from DEST_SCHEMA.TABLE_1 a join DEST_SCHEMA.TABLE_2 b on a.id = b.id where a.TEXT IS NULL

为什么会出现这个错误?

【问题讨论】:

  • @[User::NoteMaxDate] 变量的值/表达式是什么?
  • 该值在运行时是动态的,所以当我进入包时,它是它第一次运行的日期/时间(即6/26/2019 2:02 PM)。 EvaluateAsExpression 设置为 True,因为它正被其他变量使用。
  • 为什么要写一个表达式来设置@[User::TextMaxDate] = @[User::TextMaxDate] !!只需删除表达式并将EvaluateAsExpression 设置为False
  • 是的,还要确保select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1 正在返回一个值
  • 在 Visual Studio 中,您可以在变量上添加监视。在 SQL Server 代理作业中,我认为您必须编辑包并将此值(sql 任务的结果)导出到表或外部文件以进行检查。

标签: sql-server ssis sql-server-2012 ssis-2012


【解决方案1】:

为什么要写一个表达式来设置@[User::TextMaxDate] = @[User::TextMaxDate] !!

只需删除表达式并将 EvaluateAsExpression 设置为 False。还要确保

select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1 

正在返回一个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多