Sql server 2005 如何在SSIS中动态检测文件名?

Sql server 2005 如何在SSIS中动态检测文件名?,sql-server-2005,ssis,Sql Server 2005,Ssis,我需要使用MS SSIS将平面文件转换为DB。我需要一种方法来查看一个特定的文件夹,以获取(唯一)平面文件,文件名的格式是“filename ccyymdd.txt” 如果有办法从文件夹中添加文件,请帮助我 或 获取格式为“Filename ccyymdd.txt”的文件名,其中ccyymdd是当前日期,或者根据要求是CurrentDate-1 任何代码示例或屏幕截图都将受到高度赞赏 可能通过连接将文件名放入变量中,并使用表达式设置变量。要动态获取连接,需要在平面文件的ConnectionStr

我需要使用MS SSIS将平面文件转换为DB。我需要一种方法来查看一个特定的文件夹,以获取(唯一)平面文件,文件名的格式是“filename ccyymdd.txt”

如果有办法从文件夹中添加文件,请帮助我 或 获取格式为“Filename ccyymdd.txt”的文件名,其中ccyymdd是当前日期,或者根据要求是CurrentDate-1


任何代码示例或屏幕截图都将受到高度赞赏

可能通过连接将文件名放入变量中,并使用表达式设置变量。

要动态获取连接,需要在平面文件的ConnectionString属性上使用表达式

例如,要获取“D:\CC080226.txt”,可以使用以下表达式

“D:\CC”
+右((DT_WSTR,4)年(GETDATE()),2) +(DT_WSTR,2)个月(GETDATE()) +(DT_WSTR,2)天(GETDATE())
+“.TXT”

对不起,我很忙,这是脚本中的快照,希望能有所帮助

此软件包正在扫描文件夹以查找符合规格的文件,然后将控件传递给数据流

控制流

对于每个循环属性

文件系统属性

导入系统
导入系统数据
导入系统。数学
导入Microsoft.SqlServer.Dts.Runtime
导入System.IO
公共类ScriptMain
公用分干管()
Dim Ext As String=“.txt”
Dim Path As String=“.\””必须从包变量中获取才能更具动态性
Dim FileNames()格式为String=Directory.GetFiles(路径“CC*”+Ext,SearchOption.TopDirectoryOnly)
Dim ValidFileNames作为新系列
将每个文件名作为文件名中的字符串
Dim FileDate As String=FileName.Substring(Len(Path)+2)的前两个字母已经是“CC”
如果不是IsYmd(FileDate.Substring(0,Len(FileDate)-Len(Ext)),则继续
ValidFileNames.Add(文件名)
下一个
变量(“文件名”).Value=ValidFileNames
Dts.TaskResult=Dts.Results.Success
端接头
私有函数IsYmd(ByVal测试为字符串)为布尔值
如果Len(Test)6,则返回False
作为字符串的Dim年份=左侧(测试,2)
尝试
如果CStr(2000+CInt(年))“20”+年,则返回False
特例
返回错误
结束尝试
字符串形式的月数=月中(测试,3,2)
尝试
如果CInt(月)<1,则返回False
如果CInt(月)>12,则返回False
特例
返回错误
结束尝试
Dim Day作为字符串=右侧(测试,2)
将FirstOfMonth变暗为String=“20”+年+“/”+月+“/01”
Dim EndOfMonth作为整数=DateAndTime.Day(DateAndTime.DateAdd(DateInterval.Day,-1_
DateAndTime.DateAdd(DateInterval.Month,1,CDate(月初)))
尝试
如果CInt(Day)<1,则返回False
如果CInt(Day)>EndOfMonth,则返回False
特例
返回错误
结束尝试
返回真值
端函数
末级

在数据流中,右键单击平面文件源>显示高级编辑器>组件属性。在“自定义属性”下,指定FileNameColumnName属性的名称。这将向output columns集合添加文件路径和名称

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.IO

Public Class ScriptMain

    Public Sub Main()
        Dim Ext As String = ".txt"
        Dim Path As String = ".\" 'must get from package variable to be more dynamic
        Dim FileNames() As String = Directory.GetFiles(Path, "CC*" + Ext, SearchOption.TopDirectoryOnly)
        Dim ValidFileNames As New Collection
        For Each FileName As String In FileNames
            Dim FileDate As String = FileName.Substring(Len(Path) + 2) 'first 2 letter is already "CC"
            If Not IsYmd(FileDate.Substring(0, Len(FileDate) - Len(Ext))) Then Continue For
            ValidFileNames.Add(FileName)
        Next
        Dts.Variables("FileNames").Value = ValidFileNames
        Dts.TaskResult = Dts.Results.Success
    End Sub


    Private Function IsYmd(ByVal Test As String) As Boolean
        If Len(Test) <> 6 Then Return False
        Dim Year As String = Left(Test, 2)
        Try
            If CStr(2000 + CInt(Year)) <> "20" + Year Then Return False
        Catch ex As Exception
            Return False
        End Try
        Dim Month As String = Mid(Test, 3, 2)
        Try
            If CInt(Month) < 1 Then Return False
            If CInt(Month) > 12 Then Return False
        Catch ex As Exception
            Return False
        End Try
        Dim Day As String = Right(Test, 2)
        Dim FirstOfMonth As String = "20" + Year + "/" + Month + "/01"
        Dim EndOfMonth As Integer = DateAndTime.Day(DateAndTime.DateAdd(DateInterval.Day, -1, _
            DateAndTime.DateAdd(DateInterval.Month, 1, CDate(FirstOfMonth))))
        Try
            If CInt(Day) < 1 Then Return False
            If CInt(Day) > EndOfMonth Then Return False
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

End Class