How to import text files with the same name and schema but different directories into database?

前端 未结 1 1449
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-27 23:17

I require to import multiple txt files with the same name and same schemas into the same table in SQL Server 2008 database. The problem that I have is that they are all in d

1条回答
  •  攒了一身酷
    2020-11-27 23:27

    Yes. You will want to use a Foreach File Container and then check the Traverse Subfolder option.

    Edit

    Apparently my answer wasn't cromulent enough, so please accept this working code which illustrates what my brief original answer stated.

    Source data

    I created 3 folders as described above to contain files sample1.txt and sample2.txt

    C:\>MKDIR SSISDATA\SO\TEST\201304
    C:\>MKDIR SSISDATA\SO\TEST\201305
    C:\>MKDIR SSISDATA\SO\TEST\201306
    

    The contents of the file are below. Each version of the file in each folder has the ID value incremented along with the text values altered to prove it has picked up the new file.

    ID,value
    1,ABC
    

    Package generation

    This part assumes you have BIDS Helper installed. It is not required for the solution but simply provides a common framework future readers could use to reproduce this solution

    I created a BIML file with the following content. Even though I have the table create step in there, I needed to have that run on the target server prior to generating the package.

    
        
        
            
                
                    
                    
                
            
        
    
        
        
            
            
    
        
    
        
        
            
                
                    
                    
                        
                            
                            @[User::CurrentFileName]
                        
                    
                
    
                
                
                    C:\ssisdata\so\TEST\201306\sample1.txt
                    *.txt
                    C:\ssisdata\so\TEST
                    0
                    [dbo].[so_19957451]
                
    
                
                
                    
                        
                            IF NOT EXISTS (SELECT * FROM sys.tables T WHERE T.name = 'so_19957451' and T.schema_id = schema_id('dbo'))
                            BEGIN
                                CREATE TABLE dbo.so_19957451(ID int NOT NULL, value varchar(20) NOT NULL);
                            END
                        
                    
                    
                        
                        
                            @[User::SourceFolder]
                            @[User::FileMask]
                        
                        
                            
                            
                        
                        
                            
                                
                                    
                                    
                                    
                                                                          
                                    
                                
                            
                        
                    
                
            
        
    
    

    Right click on the biml file and select Generate SSIS Package. At this point, you should have a package named so_19957451 added to your current SSIS project.

    Package configuration

    There's no need for any configuration because it's already been done via BIML but moar screenshots make for better answers.

    This is the basic package

    Control flow

    Here are my variables

    Variables

    Configuration of the Foreach Loop, as called out in the MSDN article as well as my note of select the Traverse subfolder

    Traverse Subfolder

    Assign the value generated per loop to the variable Current

    assign variables

    The flat file source has an expression applied to the ConnectionString property to ensure it uses the Variable @User::CurrentFileName. This changes the source per execution of the loop.

    enter image description here

    Execution results

    Results from the database

    enter image description here

    Match the output from the package execution

    Information: 0x402090DC at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201304\sample1.txt" has started.

    Information: 0x402090DD at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201304\sample1.txt" has ended.

    Information: 0x402090DC at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201304\sample2.txt" has started.

    Information: 0x402090DD at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201304\sample2.txt" has ended.

    Information: 0x402090DC at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201305\sample1.txt" has started.

    Information: 0x402090DD at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201305\sample1.txt" has ended.

    Information: 0x402090DC at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201305\sample2.txt" has started.

    Information: 0x402090DD at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201305\sample2.txt" has ended.

    Information: 0x402090DC at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201306\sample1.txt" has started.

    Information: 0x402090DD at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201306\sample1.txt" has ended.

    Information: 0x402090DC at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201306\sample2.txt" has started.

    Information: 0x402090DD at DFT Import file, FFS Sample [2]: The processing of file "C:\ssisdata\so\TEST\201306\sample2.txt" has ended.

    0 讨论(0)
提交回复
热议问题