Den måde, jeg tidligere har gjort det på, er med en infinite loop-pakke kaldet fra SQL Server Agent, for eksempel;
Dette er min infinite loop-pakke:
Indstil 3 variabler:
IsFileExists - Boolean - 0
FolderLocation - String - C:\Hvor filen skal lægges ind\
IsFileExists Boolean - 0
For For Loop-beholderen:
Indstil IsFileExists
variabler som ovenfor.
Konfigurer en C#-scriptopgave med ReadOnlyVariable som User::FolderLocation
og har følgende:
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;
}
}
}
Hvad dette vil gøre, er i det væsentlige at holde øje med mappens placering for en .txt-fil, hvis filen ikke er der vil den sove i 10 sekunder (du kan øge dette, hvis du vil). Hvis filen eksisterer, fuldføres den, og pakken vil derefter udføre indlæsningspakken. Den vil dog fortsætte med at køre, så næste gang en fil slippes i, vil den udføre indlæsningspakken igen.
Sørg for at køre denne forever loop-pakke som et sql-serveragentjob, så den kører hele tiden, vi har en lignende pakke kørende, og den har aldrig forårsaget nogen problemer.
Sørg også for, at din inputpakke flytter/arkiverer filen væk fra drop-mappens placering.