sql >> Database >  >> RDS >> Sqlserver

Hoe een SSIS-pakket uit te voeren wanneer een bestand in de map is aangekomen?

De manier waarop ik dit in het verleden heb gedaan, is met een oneindig luspakket dat bijvoorbeeld vanuit SQL Server Agent wordt aangeroepen;

Dit is mijn oneindige luspakket:

Stel 3 variabelen in:

IsFileExists - Boolean - 0

FolderLocation - String - C:\Waar het bestand moet worden geplaatst\

IsFileExists Boolean - 0

Voor de For Loop-container:

Stel de IsFileExists in variabelen zoals hierboven.

Stel een C#-scripttaak in met de ReadOnlyVariable als User::FolderLocation en hebben het volgende:

 public void Main()
    {
        int fileCount = 0;
        string[] FilesToProcess;
        while (fileCount == 0)
        {
            try
            {

                System.Threading.Thread.Sleep(10000);
                FilesToProcess = System.IO.Directory.GetFiles(Dts.Variables["FolderLocation"].Value.ToString(), "*.txt");
                fileCount = FilesToProcess.Length;

                if (fileCount != 0)
                {
                    for (int i = 0; i < fileCount; i++)
                    {
                        try
                        {

                            System.IO.FileStream fs = new System.IO.FileStream(FilesToProcess[i], System.IO.FileMode.Open);
                            fs.Close();

                        }
                        catch (System.IO.IOException ex)
                        {
                            fileCount = 0;
                            continue;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // TODO: Add your code here
        Dts.TaskResult = (int)ScriptResults.Success;
    }
}
}

Wat dit zal doen, is in wezen de maplocatie voor een .txt-bestand in de gaten houden, als het bestand er niet is, zal het 10 seconden slapen (je kunt dit verhogen als je wilt). Als het bestand bestaat, wordt het voltooid en voert het pakket het laadpakket uit. Het blijft echter draaien, dus de volgende keer dat een bestand wordt neergezet, wordt het laadpakket opnieuw uitgevoerd.

Zorg ervoor dat u dit forever loop-pakket uitvoert als een sql-serveragenttaak, zodat het de hele tijd wordt uitgevoerd, we hebben een soortgelijk pakket dat draait en het heeft nooit problemen veroorzaakt.

Zorg er ook voor dat uw invoerpakket het bestand verplaatst/archiveert van de locatie van de neerzetmap.



  1. Eenvoudige getColumnName(0)-aanroep genereert ongeldige kolomindex:getValidColumnIndex

  2. Werken met Salesforce.com-gegevens in SQL Server Reporting Services

  3. Hoe te ontsnappen aan één citaat, speciale tekens in MySQL

  4. MYSQL INNER JOIN om 3 soorten resultaten te krijgen