Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSIS字符串变量无法执行脚本任务_C#_Sql_Variables_Ssis - Fatal编程技术网

C# SSIS字符串变量无法执行脚本任务

C# SSIS字符串变量无法执行脚本任务,c#,sql,variables,ssis,C#,Sql,Variables,Ssis,我有一个SSIS包,它运行几个SQL存储过程、文件任务以及一个xml和一个脚本任务。最后一个脚本任务发送一封包含html表、Excel文件附件和电子邮件正文的电子邮件。我有一个变量,用于每天唯一地标记Excel文件,以及唯一地标记电子邮件的主题行。这个变量就是当前日期。但是,日期最初是硬编码在变量值中的。但是,我决定添加一个executesql任务,它返回并格式化当前日期。然后填充该每日变量 我遇到的问题是,当变量的值字段为空时,发送电子邮件的脚本任务失败。即使它不是空的,脚本任务也会失败。仅当

我有一个SSIS包,它运行几个SQL存储过程、文件任务以及一个xml和一个脚本任务。最后一个脚本任务发送一封包含html表、Excel文件附件和电子邮件正文的电子邮件。我有一个变量,用于每天唯一地标记Excel文件,以及唯一地标记电子邮件的主题行。这个变量就是当前日期。但是,日期最初是硬编码在变量值中的。但是,我决定添加一个executesql任务,它返回并格式化当前日期。然后填充该每日变量

我遇到的问题是,当变量的值字段为空时,发送电子邮件的脚本任务失败。即使它不是空的,脚本任务也会失败。仅当输入当前日期的值时,此操作才会成功。因此,只有当值等于填充变量的SQL任务的返回值时,它才起作用

但是,脚本任务获取SQL任务的返回值,而不是变量的硬编码值。我之所以知道这一点,是因为我可以在变量的值部分中写入2013年8月23日的无上限值,并且电子邮件和文件扩展名中使用的值仍然是2013年8月23日的大写值—SQL任务的确切返回值

我的问题是,我在研究中没有发现多少有用的信息,为什么会发生这种情况?必须每天写入该值,这就违背了将SQL任务[填充变量]放在其中的初衷。此外,请注意,当我最初在中添加SQL任务时,即使变量值为空,包也成功了。直到我在软件包中添加了几项内容之后,我才陷入了这种困境。如有任何意见、建议和建议,我们将不胜感激。多谢各位

下面列出了失败脚本任务的代码。我提到的每日变量名为InternalStr_FieldingDate


如果变量只是为了唯一地命名文件,那么使用SQL任务返回变量不是很浪费吗

更好的选择是从表达式计算变量

变量和其他变量一样具有属性

您可以将EvaluatesExpression属性设置为true,然后使用任意表达式计算日期。例如:

(DT_WSTR, 4 )YEAR(getdate())
+ RIGHT("0" + (DT_WSTR,2)MONTH(getdate()),2)
+ RIGHT("0" + (DT_WSTR,2)DAY(getdate()),2)

将返回YYYYMMDD字符串以供使用。

请发布失败的脚本任务的代码。因此我找到了解决方法,但我仍然对问题所在感到困惑。如果我将填充InternalStr_FieldingDate变量的SQL任务向上移动到任务链中,则包将在不停止脚本任务的情况下成功,但如果我将其置于上一个任务的第三个原始位置—SQL任务、XML任务、脚本任务,则会中断脚本任务。有人知道原因吗?事先非常感谢。谢谢你,斯蒂芬。我最初尝试过这个方法,但由于某种原因,变量没有计算表达式。我可能忘了将EvaluatesExpression属性设置为true。我想知道这是否可能是一个变量范围问题,即根据您定义变量的位置移动任务。我怀疑是这样的——尽管回到你的代码,我可能会定义局部变量并将它们设置为包变量——然后在你的电子邮件生成声明中使用它们——而不是在线调用replace等;易于阅读,便于调试
(DT_WSTR, 4 )YEAR(getdate())
+ RIGHT("0" + (DT_WSTR,2)MONTH(getdate()),2)
+ RIGHT("0" + (DT_WSTR,2)DAY(getdate()),2)