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.