Způsob, jakým jsem to dělal v minulosti, je například pomocí balíčku s nekonečnou smyčkou volaného z SQL Server Agent;
Toto je můj balíček nekonečné smyčky:
Nastavit 3 proměnné:
IsFileExists - Boolean - 0
FolderLocation - String - C:\Kam má být soubor umístěn\
IsFileExists Boolean - 0
Pro kontejner For Loop:
Nastavte IsFileExists
proměnné jako výše.
Nastavte úlohu skriptu C# s proměnnou ReadOnlyVariable jako User::FolderLocation
a mají následující:
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;
}
}
}
Co to udělá, je v podstatě sledovat umístění složky pro soubor .txt, pokud tam soubor není, přejde na 10 sekund do režimu spánku (pokud chcete, můžete toto nastavení zvýšit). Pokud soubor existuje, bude dokončen a balíček pak spustí načtení balíčku. Bude však pokračovat v běhu, takže při příštím vhození souboru do něj znovu spustí načítací balíček.
Ujistěte se, že tento balíček s věčnou smyčkou spouštíte jako úlohu agenta serveru SQL, aby se spouštěl neustále, máme podobný balíček spuštěný a nikdy nezpůsobil žádné problémy.
Také se ujistěte, že váš vstupní balíček přesouvá/archivuje soubor mimo umístění složky pro přetažení.