SQL 变量评估失败的服务器作业表达式
SQL Server Job Expression for Variable Failed Evaluation
我有一个 SSIS 包,运行在本地没有错误。然后将其部署到目录和 运行 SQL 代理作业中。从功能上讲,作业 运行 正确并且所有数据都在应有的位置,但它总是会引发此错误:
The expression for variable "TextMaxDate" failed evaluation. There was an error in the expression.
我找不到更有意义的消息。 SSIS包有三个变量...
TextMaxDate
- 数据类型=
DateTime
- 表达式=
@[User::TextMaxDate]
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() ) + "'"
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() ) + "'"
并遵循此流程...
执行SQL任务
- SQL语句设置为
select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1
。
- 结果集将结果名称设置为
MaxDate
,将变量名称设置为 User::TextMaxDate
数据流任务(Oracle Attunity 驱动程序)
- 在表达式下...[Oracle Source].[SqlCommand] 设置为
@[User::TextSQL_NoContent]
- 将数据加载到 DEST_SCHEMA。TABLE_1,但不映射
TEXT
列,因此它对于每个插入的记录都是空的。
数据流任务(OLE DB 源编辑器)
- 数据访问模式设置为
SQL command from variable
- 变量名称设置为
User::TextSQL_Content
- 将数据加载到 DEST_SCHEMA。TABLE_2
执行SQL任务
- SQL语句设置为
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::TextMaxDate]
= @[User::TextMaxDate]
!!
只需删除表达式并将 EvaluateAsExpression 设置为 False
。还要确保
select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1
正在返回一个值。
我有一个 SSIS 包,运行在本地没有错误。然后将其部署到目录和 运行 SQL 代理作业中。从功能上讲,作业 运行 正确并且所有数据都在应有的位置,但它总是会引发此错误:
The expression for variable "TextMaxDate" failed evaluation. There was an error in the expression.
我找不到更有意义的消息。 SSIS包有三个变量...
TextMaxDate
- 数据类型=
DateTime
- 表达式=
@[User::TextMaxDate]
- 数据类型=
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() ) + "'"
- 数据类型=
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() ) + "'"
- 数据类型=
并遵循此流程...
执行SQL任务
- SQL语句设置为
select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1
。 - 结果集将结果名称设置为
MaxDate
,将变量名称设置为User::TextMaxDate
- SQL语句设置为
数据流任务(Oracle Attunity 驱动程序)
- 在表达式下...[Oracle Source].[SqlCommand] 设置为
@[User::TextSQL_NoContent]
- 将数据加载到 DEST_SCHEMA。TABLE_1,但不映射
TEXT
列,因此它对于每个插入的记录都是空的。
- 在表达式下...[Oracle Source].[SqlCommand] 设置为
数据流任务(OLE DB 源编辑器)
- 数据访问模式设置为
SQL command from variable
- 变量名称设置为
User::TextSQL_Content
- 将数据加载到 DEST_SCHEMA。TABLE_2
- 数据访问模式设置为
执行SQL任务
- SQL语句设置为
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
- SQL语句设置为
为什么会出现这个错误?
为什么要写一个表达式来设置 @[User::TextMaxDate]
= @[User::TextMaxDate]
!!
只需删除表达式并将 EvaluateAsExpression 设置为 False
。还要确保
select max(cast(created_date as date)) MaxDate from DEST_SCHEMA.table_1
正在返回一个值。