SSIS存档文件

时间:2017-12-05 09:51:11

标签: sql-server csv variables ssis etl

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

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

1 个答案:

答案 0 :(得分:2)

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

在字符串文件中使用一个变量,它保存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);
                }

            }
        }