Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将最新的csv文件导入ssis中的sql server_Ssis - Fatal编程技术网

将最新的csv文件导入ssis中的sql server

将最新的csv文件导入ssis中的sql server,ssis,Ssis,我有一个文件夹,在这个文件夹中,我每半小时收到一个带有时间戳的.csv文件。现在,我需要从可用文件中获取最新的文件,并将其导入sql server 比如说 在我的源文件夹中,我有 测试_01112012_120122.csv 测试_01112012_123022.csv 测试_01112012_123555.csv 现在,我需要获取最新的文件,并在SSIS的帮助下将该文件导入sql server 谢谢 satish看看这篇文章,了解tsql中的目录列表 然后您可以通过排序找到最新的文件。假设您想

我有一个文件夹,在这个文件夹中,我每半小时收到一个带有时间戳的.csv文件。现在,我需要从可用文件中获取最新的文件,并将其导入sql server

比如说

在我的源文件夹中,我有

测试_01112012_120122.csv
测试_01112012_123022.csv
测试_01112012_123555.csv

现在,我需要获取最新的文件,并在SSIS的帮助下将该文件导入sql server

谢谢

satish

看看这篇文章,了解tsql中的目录列表


然后您可以通过排序找到最新的文件。

假设您想使用C#,要获取给定目录中的最新文件,您可以使用如下方法

private static FileInfo GetLatestFile(string directoryName, string fileExtension)
{
    DirectoryInfo directoryInfo = new DirectoryInfo(directoryName);
    return directoryInfo.GetFiles(fileExtension)
         .OrderByDescending(q => q.LastWriteTimeUtc)
         .FirstOrDefault();
}
这个方法叫做like

FileInfo file=GetLatestFile(“C:\myDirectory”,“*.csv”)


并返回文件的FileInfo实例(或null)和最近的写入时间。然后,您可以使用FileInfo实例获取文件名等,以便进行处理。

即使您使用SSIS作为导入工具,也需要@garry Vass或类似的代码

在SSIS中,您需要将连接字符串更新到平面文件连接管理器,以指向新文件。因此,您需要确定最新的文件是什么

查找最近的文件 无论是通过文件属性(Garry的代码)还是文件名的切片和切分,都将取决于您的业务规则。它始终是最近修改的文件(属性),还是需要基于被解释为序列的文件名。如果
测试_011112012_120122.csv
中有错误且内容已更新,则这一点很重要。修改日期将更改,但文件名不会更改,并且这些更改不会被移植回数据库

我建议您创建两个字符串类型的变量,其作用域为名为
RootFolder
CurrentFile
的包。或者,如果限制为特定类型,如
*.csv
,则可以创建一个名为FileMask的文件
RootFolder
将是您希望在
C:\ssisdata\MyProject
中找到文件的基本文件夹<代码>当前文件将从完全限定路径的脚本中为最近修改的文件分配一个值。此时,我发现为CurrentFile指定一个设计时值很有帮助,通常是为集合中最旧的文件指定

将脚本任务拖到控制流上,并设置为ReadOnlyVariable User::RootFolder(可选的User::FileMask)。您的ReadWriteVariable将是User::CurrentFile。

此脚本将放在
公共部分类ScriptMain:…
大括号中

//
///此详细脚本标识fileMask类型的最近修改的文件
///生活在RootFolder中,并将其分配给DTS级别变量。
/// 
公共图书馆
{
字符串fileMask=“*.csv”;
string mostRecentFile=string.Empty;
string rootFolder=string.Empty;
//从DTS变量集合中分配值。
//这区分大小写。不需要User::
//但必须将其从对象类型转换为强类型
rootFolder=Dts.Variables[“User::rootFolder”].Value.ToString();
//如果需要,重复上述模式为fileMask指定一个值
//使其成为更灵活的方法
//确定最近的文件,该文件可能为空
System.IO.FileInfo candidate=ScriptMain.GetLatestFile(根文件夹,文件掩码);
if(候选者!=null)
{
mostRecentFile=candidate.FullName;
}
//将结果推回到变量上
Dts.Variables[“CurrentFile”].Value=mostRecentFile;
Dts.TaskResult=(int)ScriptResults.Success;
}
/// 
///查找与模式匹配的最新文件
/// 
///要开始搜索的文件夹
///搜索的扩展,例如.*.csv
/// 
私有静态System.IO.FileInfo GetLatestFile(字符串目录名,字符串文件扩展名)
{
System.IO.DirectoryInfo DirectoryInfo=新的System.IO.DirectoryInfo(directoryName);
System.IO.FileInfo mostRecent=null;
//如果需要搜索子文件夹,请将search选项更改为AllDirectory
System.IO.FileInfo[]legacyArray=directoryInfo.GetFiles(文件扩展名,System.IO.SearchOption.TopDirectoryOnly);
foreach(System.IO.FileInfo当前在legacyArray中)
{
if(mostRecent==null)
{
mostRecent=当前;
}
如果(current.LastWriteTimeUtc>=mostRecent.LastWriteTimeUtc)
{
mostRecent=当前;
}
}
回报率最高;
//要使下面的代码正常工作,您需要编辑项目的属性
//将TargetFramework更改为3.5或4。不确定
//当前错误是2.0框架不存在OrderByDescending
//返回directoryInfo.GetFiles(文件扩展名)
//.OrderByDescending(q=>q.LastWriteTimeUtc)
//.FirstOrDefault();
}
#区域脚本结果声明
/// 
///这个枚举在这个类的范围内提供了一个方便的速记来设置
///脚本的结果。
/// 
///此代码是自动生成的。
/// 
枚举脚本结果
{
Success=Microsoft.SqlServer.Dts.Runtime.dtsesecresult.Success,
Failure=Microsoft.SqlServer.Dts.Runtime.dtsesecresult.Failure
};
#端区
}
更新连接管理器 此时,我们的脚本为CurrentFile变量指定了一个值。下一步是告诉SSIS我们需要使用该文件。在CSV的连接管理器中,需要设置表达式(F4或r