每个文件枚举器中的SSIS文件筛选器

问题描述 投票:0回答:1

我有一个For For file Enumerator。在文件夹下我有E:\Input

在文件下我有"*" + @[User:Date] + "*.*"

日期变量设置为20180101

变量映射设置为User::FileToBeMoved

在枚举器中我有一个文件系统移动文件,其中Source是变量User::FileToBeMoved,目标是包含E:\Input\Archive的变量

我有像In20180101.txtIntermediate20180101.txtOut20180101.txt那样的文件

文件未被移动。看起来它没有识别过滤器"*" + @[User:Date] + "*.*"

如果我进入Windows资源管理器并将*20180101*.*放在搜索框中,它完全符合我的要求,向我显示包含20180101的3个文件

有人能告诉我为什么这不适用于SSIS吗?

谢谢,

迪克

sql-server ssis etl
1个回答
0
投票

“文件”部分提供了通用

您需要在FileSpec中指定表达式

enter image description here

我发现创建一个执行逻辑而不是将其嵌入到容器中的变量更容易,因为您可以检查变量中的值而不是任务中的值。

Solution using BIML

如果你进入Biml,这将创建一个包,其中包含基于变量DateString的值将表达式应用于For Each File Enumerator的文件规范的所有工作。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="so_48067171">
            <Variables>
                <Variable Name="Date" DataType="String">20180101</Variable>
                <Variable Name="DateString" DataType="String" EvaluateAsExpression="true">"*" + @[User::Date] + "*"</Variable>
                <Variable Name="CurrentFile" DataType="String">Demo.txt</Variable>
                <Variable Name="ArchiveFolder" DataType="String">C:\ssisdata\archive</Variable>
            </Variables>
            <Tasks>
                <ForEachFileLoop Name="FELC TodayFiles" Folder="C:\ssisdata\input" FileSpecification="*.txt" >
                    <VariableMappings>
                        <VariableMapping Name="0" VariableName="User.CurrentFile" />
                    </VariableMappings>
                    <Expressions>
                        <Expression ExternalProperty="FileSpec">@[User::DateString]</Expression>
                    </Expressions>
                        <Tasks>
                           <FileSystem Name="FST Archive file" Operation="MoveFile" >
                               <VariableInput VariableName="User.CurrentFile" />
                               <VariableOutput VariableName="User.ArchiveFolder" />
                           </FileSystem>
                        </Tasks>
                </ForEachFileLoop>
            </Tasks>
        </Package>
    </Packages>
</Biml>

您的TODO将根据当前日期或日期减去1来设置@ [User :: Date]的值。

© www.soinside.com 2019 - 2024. All rights reserved.