Начинът, по който съм правил това в миналото, е например с пакет с безкраен цикъл, извикан от SQL Server Agent;
Това е моят пакет за безкраен цикъл:
Задайте 3 променливи:
IsFileExists - Булева стойност - 0
FolderLocation - String - C:\Къде трябва да се постави файлът\
IsFileExists Boolean - 0
За контейнера For Loop:
Задайте IsFileExists
променливи както по-горе.
Настройте задача на C# скрипт с ReadOnlyVariable като User::FolderLocation
и имат следното:
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;
}
}
}
Това, което ще направи, е по същество да следи местоположението на папката за .txt файл, ако файлът не е там, той ще заспи за 10 секунди (можете да увеличите това, ако желаете). Ако файлът съществува, той ще бъде завършен и след това пакетът ще изпълни пакета за зареждане. Той обаче ще продължи да работи, така че следващия път, когато файл бъде пуснат в него, ще изпълни пакета за зареждане отново.
Уверете се, че изпълнявате този пакет за вечни цикли като работа на агент на sql сървър, така че да работи през цялото време, имаме подобен пакет, работещ и той никога не е създавал проблеми.
Също така се уверете, че вашият входен пакет премества/архивира файла далеч от местоположението на папката за изхвърляне.