sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man kör SSIS-paketet när en fil anländer till mappen

Sättet jag har gjort detta tidigare är med ett infinite loop-paket anropat från SQL Server Agent, till exempel;

Det här är mitt infinite loop-paket:

Ange 3 variabler:

IsFileExists - Boolean - 0

FolderLocation - String - C:\Där filen ska läggas i\

IsFileExists Boolean - 0

För For Loop-behållaren:

Ställ in IsFileExists variabler enligt ovan.

Konfigurera en C#-skriptuppgift med ReadOnlyVariable som User::FolderLocation och har följande:

 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;
    }
}
}

Vad detta kommer att göra är att hålla ett öga på mappplatsen för en .txt-fil, om filen inte finns där kommer den att vila i 10 sekunder (du kan öka detta om du vill). Om filen existerar kommer den att slutföras och paketet kommer att köra laddningspaketet. Men det kommer att fortsätta att köras, så nästa gång en fil släpps i kommer den att köra laddningspaketet igen.

Se till att köra detta forever loop-paket som ett sql-serveragentjobb så att det körs hela tiden, vi har ett liknande paket igång och det har aldrig orsakat några problem.

Se också till att ditt inmatningspaket flyttar/arkiverar filen bort från släppmappens plats.



  1. postgresql jsonb skiftlägesokänslig fråga

  2. Hur man hittar det maximala värdet för en numerisk kolumn i SQL

  3. Ansluter till Oracle Database med SQL Server Integration Services

  4. PHP-fråga:PDO Prepare() och Execute() med MYSQL IN() fungerar inte för arrayer