【发布时间】:2018-10-07 12:48:16
【问题描述】:
我必须将 2 个平面文件加载到 SQL Server 表中。平面文件被加载到一个文件夹中。它有数千个其他文件。如果它是具有不同日期的同一个文件,我会使用 foreach 循环并完成它..但这是场景。
我要加载的文件名如下:
- Non_Payment_Stat_Data1_12_2017.txt
Payment_Stat_Data1_12_2017.txt
文件每天加载
- 我需要将上面的文件类型加载到表中(选择日期加载)
还有许多其他文件,其中一些是Payment_Stat_Data 或Non_Payment_Stat_Data,末尾没有日期部分。我们不想将这些加载到表中。
我尝试使用脚本任务 c# 代码,它给了我最新的文件,但不是我们想要加载的文件。
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
namespace ST_2650e9fc7f2347b2826459c2dce1b5be.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
// TODO: Add your code here
var directory= new DirectoryInfo(Dts.Variables["User::VarFolderPath"].Value.ToString());
FileInfo[] files = directory.GetFiles();
DateTime lastModified = DateTime.MinValue;
foreach (FileInfo file in files)
{
if (file.LastWriteTime > lastModified)
{
lastModified = file.LastWriteTime;
Dts.Variables["User::VarFileName"].Value = file.ToString();
}
}
MessageBox.Show(Dts.Variables["User::VarFileName"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
来源:http://www.techbrothersit.com/2013/12/ssis-how-to-get-most-recent-file-from.html
代码有效,但提供了另一个最新的平面文件。我只想提取 Non_Payment_Stat_Data1_12_2017.txt 和 Payment_Stat_Data1_12_2017.txt 文件。他们每天都会更改日期。
【问题讨论】:
-
你的问题有点混乱。你说你想获取最新的文件,但是当你这样做时,它不是你想要的文件。然后你提到几个静态文件名并说你总是想选择那些文件。是哪个?
-
这两个看起来像 Non_Payment_Stat_Data1_12_2017 和 Payment_Stat_Data1_12_2017 这样的静态文件实际上每天都在变化,即日期部分每天都在变化,我们想每天抓取这两个具有新日期的文件并加载。例如,当上述 2 个文件的日期为 1_13_2017 时,我们加载它们并忽略旧文件(不重新加载它们)
-
那么,如果您可以预测文件的名称,为什么不这样做呢?
-
我不明白。是的,文件名保持不变,但日期发生了变化,所有旧的平面文件仍然在同一个文件夹中,我们只想加载上述两种类型的新文件。
-
使用表达式来构建基于日期的文件名。但这通常是个坏主意。你应该编写你的包,使它在任何天都能正常工作,即使你为一个已经加载的文件运行它。
标签: sql-server tsql ssis