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.