如何检查SQL Server Integration Services 2005中是否存在文件?
是否有本机SSIS组件可以为您执行此操作?
答案 0 :(得分:7)
我使用Script Task检查了文件是否存在,然后进行相应的分支。
您可以执行类似
的操作If System.IO.File.Exists("\\Server\Share\Folder\File.Ext") Then
Dts.TaskResult = Dts.Results.Success
Else
Dts.TaskResult = Dts.Results.Failure
End If
虽然没有本机组件,但是可以使用SSIS的几个第三方组件来实现此目的。
SSIS中的File System Task基本上用于移动,复制,删除等,但不支持文件存在检查。
答案 1 :(得分:3)
@Raj More提供了一个很好的解决方案。我之前使用的另一种方法是创建一个Foreach循环容器,它在文件系统上循环以获取文件规范。如果您知道所需文件的名称,则可以在变量中设置名称,并将规范设置为等于Foreach循环容器的表达式选项卡中的变量。如果您不知道确切的名称但知道命名约定或知道文件夹中没有其他文件,您也可以指定或者目录或部分文件名。
如果要根据是否存在文件来执行特定操作,则可以创建默认值为0的变量,并在Foreach循环容器中创建一个脚本任务,以增加变量。如果要为每个单独文件的存在执行命令,也可以将命令放在要执行的Foreach循环容器中。如果你想根据文件的缺失采取行动,那么你可以在Foreach循环容器之后限制你的优先约束,以便它在约束和表达式上受到限制,并使它检查计数器变量是否是> 0
@ Raj的解决方案也可用于增加变量。您可以这样做,而不是使用If Else来引发错误或成功结果:
<强> C#强>
if (System.IO.File.Exists("\\Server\Share\Folder\File.Ext"))
{ Dts.Variables["my_case_sensitive_variable_name"].Value = Dts.Variables["my_case_sensitive_variable_name"].Value + 1;
}
<强> VB.NET 强>
If System.IO.File.Exists("\\Server\Share\Folder\File.Ext") Then
Dts.Variables["my_case_sensitive_variable_name"].Value = Dts.Variables["my_case_sensitive_variable_name"].Value + 1
End If
这种方法的优点是在没有文件的情况下包可能不需要失败。如果文件发生更改,您也可以使用变量名称,您可以将其定义为包中的变量,也可以仅在脚本任务中创建。 @ Raj的方法唯一的缺点是你必须知道你要检查的文件名。
另一种可能性是执行文件系统任务以将文件重命名为其现有名称或将文件复制到其现有位置。如果该文件不存在,则可以将错误路由到操作。我不推荐这个解决方案,但我记得几年前在一个实际上有意义的实例中使用它。但在那个特定的例子中,我实际上是将它复制到一个真实的位置。
祝你好运!