SSIS文件名 - 文件计数

时间:2013-05-13 11:29:18

标签: sql ssis

我正在为我们的一个客户创建flat file export,我已经设法以他们想要的格式获取文件,我正在尝试创建{{1}的最简单方法} 文件名。我把日期作为变量和路径ect但是他们想要在文件名中计数。例如

文件名1:dynamicTDY_11-02-2013_{1}_T1.txt是计数。所以下周文件将是{}

我看不出一个简单的方法!任何想法??

2 个答案:

答案 0 :(得分:1)

编辑: 在我的第一个答案中,我认为你的意思是查询返回的值的数量。我的错! 两种方法实现这一点,你可以循环到目标文件夹,按日期选择最后一个文件,获取其值并增加1,这听起来很麻烦。为什么不在数据库上使用上一个执行日期和ID的简单日志表,然后根据此表的最后一行编写文件名?

你的问题究竟在哪里?

您可以使用表达式创建动态文件名:

enter image description here

计数,您可以在数据流中使用“行计数”组件将结果分配给变量并在表达式上使用该变量:

enter image description here

答案 1 :(得分:0)

使用脚本任务并获取文件名大括号内的数字并将其存储在变量中。 创建一个存储文件编号

的变量(FileNo of type int

伪代码

  string name = string.Empty;
  string loction = @"D:\";

 /* Get the path from the connection manager like the code below
    instead of hard coding like D: above
   string flatFileConn = 
   (string(Dts.Connections["Yourfile"].AcquireConnection(null) as String);
 */
  string pattern = string.Empty;
  int number = 0;
  string pattern = @"{([0-9])}"; // Not sure about the correct regular expression to retrieve the number inside braces
  foreach (string  s in Directory.GetFiles(loction,"*.txt"))
     {
        name = Path.GetFileNameWithoutExtension(s);
        Match match = Regex.Match(name, pattern );
          if (match.Success)
           {
             dts.Variables["User::FileNo"].Value = int.Parse(match.Value)+1;
           }
     }

现在,一旦获得该值,请在连接管理器

中的文件表达式中使用它
@[User::FilePath] +@[User::FileName]
                             +"_{"+ (DT_STR,10,1252) @[User::FileNo] + "}T1.txt"