【问题标题】:SSIS Archiving a fileSSIS 归档文件
【发布时间】:2023-03-22 06:01:01
【问题描述】:

我有一个输出 csv 文件的 SSIS 包我想做的是在生成 csv 之前查看目标文件夹,如果已经存在(我每天生成它们)然后将其移动到存档文件夹.

我的文件名结构是“NAME_YYMMDD_HHMM.csv”我不确定如何查找文件,因为日期和时间总是不同的。我已经为文件名“NAME_ * _.csv”创建了一个变量,但不确定如何将其添加到文件系统任务中?如果文件不存在,则如果文件不存在,则继续执行包中的下一步存在然后将文件移动到存档文件夹

【问题讨论】:

  • 使用脚本任务来实现。

标签: sql-server csv variables ssis etl


【解决方案1】:

您应该使用脚本任务来执行此操作:

使用字符串文件中的变量来保存您从 YYMMDD 中的值,因为 HHMM 在您创建运行时时无法获取。

日期格式见here

使用 System.IO 使用命名空间;

        string filepath = @"D:\new";

        string file = "test_171205_1010.txt";

        string fullpath = filepath + @"\" + file;

        string newpath = @"D:\arch\";
        string newfullpath = newpath + file;

        if(
            File.Exists(fullpath))
        {
            File.Move(fullpath, newfullpath);
        }

更新

如果您想使用有关今天日期的信息,您可以像下面那样查找今天的所有文件并移动它们。这取决于你的逻辑应该是什么。

        string txtFile = null;
        string txtMoveFile = null;

        string date = DateTime.Now.ToString("yyMMdd");
        string filepath = @"D:\new"; 

        /*USE THIS LINE IF YOU WANNA USE VARIABLE FROM FOREACH LOOP CONTAINER*/
        string file = Dts.Variables["User::name"].Value.ToString() +"_*_*.txt";

        //string file = "test_"+date+"_*.txt";

        string[] allfilesfromcurrentdate = Directory.GetFiles(filepath, file);
        string fullpath = filepath + @"\" + file;

        string newpath = @"D:\arch\";
        string newfullpath = newpath + file;

        foreach(string fileName in allfilesfromcurrentdate)
        {
            if(fileName.Contains("test_"+date))
            {
                txtFile = fileName;
                txtMoveFile = txtFile.Replace("new", "arch");
               if(File.Exists(txtFile))
                {
                    File.Move(txtFile, txtMoveFile);
                }

            }
        }

【讨论】:

  • 除此之外,不要使用 HH 和 MM 时间戳保存 CSV 文件。只需每天保存它们,它会容易得多,而且当您每天只运行它们时就足够了。
  • 我创建了一个变量字符串“name__.csv,创建了一个包含源文件夹变量和目标变量的 foreachloopcontainer,然后将以下内容放入集合文件规范“name”中+""+"*"+""+"*"".csv" 但这是行不通的移动它
  • @Hadi - 正如我写给你的,你不能使用 HHMM,因为它的运行时。所以你将无法匹配它。因此我只使用日期。否则它不会工作。尽管如此,这不是要求,他只需要我在更新中写的文件名。这对他有用。
  • @plaidDK 好的,现在我同意 +1
  • @Hadi 但否则你是对的 :) 感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多