lar*_*o68 7 ssis file flat sql-server-2008
我在网络上有一个带文件的文件夹,我正在将文件从一个文件夹移动到另一个文件夹.但我只想移动新文件,因此只能复制目标文件夹中不存在的文件.怎么样?我已经有了for each
循环容器和文件系统任务.我正在使用变量.现在,每次执行包时,它都会将所有文件从一个文件夹复制到下一个文件夹.我可以坚持使用某种条件工具吗?我不擅长编写脚本,所以如果这是唯一的解决方案,我可能需要你的帮助.
小智 11
这是一个可以使用Foreach循环容器,脚本任务和文件系统任务实现此目的的选项.以下示例显示了如何完成此操作.该示例是使用SSIS 2008 R2创建的.
分步过程:
在路径中创建两个名为Source和Destination的文件夹C:\temp\
,如屏幕截图#1所示.
将名为Sample_File_01.txt的示例文件放在文件夹路径中C:\temp\Source\
,并将另一个文件夹C:\temp\Destination\
留空.仅当文件已存在时,SSIS包才会将文件从Source文件夹复制到Destination文件夹.参考屏幕截图#2和#3.
在SSIS包上,创建7个变量,如屏幕截图#4所示.将变量DestinationFolder设置为值C:\temp\Destination\
.将变量SourceFolder设置为该值C:\temp\Source\
.将变量FilePattern设置为值*.*
.您可以根据需要更改这些变量的值.
选择变量SourceFilePathProperties
并按F4按钮打开窗口.将属性EvaluateAsExpression更改为True
,并将属性Expression设置为值@[User::SourceFolder] + @[User::FileName]
.参见截图#5.
选择变量DestinationFilePathProperties
并按F4按钮打开窗口.将属性EvaluateAsExpression更改为True
,并将属性Expression设置为值@[User::DestinationFolder] + @[User::FileName]
.参见截屏#6.
在SSIS包的C ontrol Flow选项卡上,放置Foreach Loop container
并配置容器的属性,如屏幕截图#7和#8所示.确保选择Name and extension
" 收集"部分中的单选按钮.
在Foreach循环容器中,放置一个Script Task
.双击脚本任务,然后单击Edit Script
按钮.使用" 脚本任务代码"部分下给出的代码替换脚本任务中的Main()方法.此代码检查目标文件是否已存在,然后相应地填充布尔变量DoesFileExist.
在Foreach循环容器中,File System Task
在"脚本任务"下面放置一个.将脚本任务的成功绿色箭头连接到文件系统任务.配置文件系统任务,如屏幕截图#9所示.
只有在目标路径中不存在该文件时,我们才需要执行文件系统任务.因此,我们需要更改脚本任务和文件系统任务之间的连接器.右键单击绿色连接器,然后选择编辑,如屏幕截图#10所示.
配置Precedence Constraint,如屏幕截图#11所示.这将检查变量DoesFileExist是否包含值False
,这意味着在目标中找不到该文件.
配置完成后,SSIS包应该如屏幕截图#12所示.
屏幕截图#13显示了第一个包执行.在执行期间,目标路径中没有文件C:\temp\Destination\
.执行后,文件Sample_File_01.txt已从中复制C:\temp\Source\
到C:\temp\Destination\
.参见截图#14.
屏幕截图#15显示了第二个包执行.在执行期间,没有文件被复制到目标路径C:\temp\Destination\
.您可以注意到,File System Task
由于Precedence约束失败,因此未执行.
希望有所帮助.
脚本任务代码:
只能使用的C#代码SSIS 2008 and above
.
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::DestinationFilePath");
Dts.VariableDispenser.LockForWrite("User::DoesFileExist");
Dts.VariableDispenser.GetVariables(ref varCollection);
varCollection["User::DoesFileExist"].Value = Convert.ToBoolean(System.IO.File.Exists(varCollection["User::DestinationFilePath"].Value.ToString()));
Dts.TaskResult = (int)ScriptResults.Success;
}
Run Code Online (Sandbox Code Playgroud)
截图#1:
截图#2:
截图#3:
截图#4:
截图#5:
截图#6:
截图#7:
截图#8:
截图#9:
截图#10:
截图#11:
截图#12:
截图#13:
截图#14:
截图#15:
归档时间: |
|
查看次数: |
7186 次 |
最近记录: |