在VS-2017 SSIS中,评估的变量和成功评估的软件包在SSM中执行时不起作用



在VS-2017中,我已经用数据类型"字符串"编写了一个变量。该变量使用另一个变量,以确定应从什么时间从数据库中提取的时间。

当前的问题是,该表达式已在VS中成功评估,可以成功执行SSIS软件包,并且可以在SSM中执行查询本身。当软件包部署到SSM并在整个集成服务目录中执行时,软件包不起作用。该软件包在第一个"或"语句中失败

我从执行报告中收到的消息说:

"语句附近的不正确语法"或"。

在SSMS中执行时,评估的值(正确的SQL查询(正常工作。我试图在'or'语句之前或之后放置一个空字符串,但没有解决问题。我试图用'and'替换'or'语句,但无效。无需'where'语句执行软件包按预期工作。在另一个软件包中,我无法复制错误

"  select * from src where id >= "+ @[User::MaxIdStr] +" or id >= "+  @[User::MaxIdStr]

错误似乎是:

where
[DateUpdated (CCUPMJ)] >= "+ @[User::Max_Upmj_Start]  +" 
or F0911.[DateUpdated (GLUPMJ)] >= "  +  @[User::Max_Upmj_Start]+"
or F560911T.[DateUpdated (GLUPMJ)] >= "+ @[User::Max_Upmj_Start]

在vs中,它被评估为:

[DateUpdated (CCUPMJ)] >= 119121 
or F0911.[DateUpdated (GLUPMJ)] >= 119121
or F560911T.[DateUpdated (GLUPMJ)] >= 119121

(119121是变量的默认值(

预期的结果应该是成功执行的软件包,实际结果是失败的执行。

如果有人知道如何解决这个问题,我会非常优雅!

在软件包执行过程中, @[User::Max_Upmj_Start]是被分配为空字符串还是空?使用一个空字符串变量,我能够复制您收到的相同的"语句附近的错误语法"或您收到的错误。由于119121是默认值,因此您可以使用SSIS IF语句检查变量的长度,并在没有值时替换119121LEN函数检查以下内容,并在@[User::Max_Upmj_Start]的长度小于1时使用默认值。为了澄清,IF语法在此变量的示例表达式上方显示。由于将其嵌套为嵌套,每个IF语句都包裹在括号中。我假设您使用完整的SELECT语句省略了变量的开头,因此此示例只是使用一个虚拟选择 *作为占位符。即使它拥有一个数字,从您的表达式中,@[User::Max_Upmj_Start]似乎是字符串变量,下面的示例遵循此假设。请注意,SSIS变量不持有空,并且对于字符串变量,将代替一个空字符串,因此使用REPLACENULL函数在这里不会有帮助。

如果语法:

Expression ? True Condition : False Condition

变量表达式:

"SELECT * FROM ... WHERE
[DateUpdated (CCUPMJ)] >= " + 
(LEN(@[User::Max_Upmj_Start]) < 1 ? "119121" : @[User::Max_Upmj_Start]) 
+ "OR F0911.[DateUpdated (GLUPMJ)] >=  " + 
(LEN(@[User::Max_Upmj_Start]) < 1 ? "119121" : @[User::Max_Upmj_Start])+ "
OR F560911T.[DateUpdated (GLUPMJ)]  >=  " + 
(LEN(@[User::Max_Upmj_Start]) < 1 ? "119121" : @[User::Max_Upmj_Start])

最新更新