Cara saya melakukan ini di masa lalu adalah dengan paket infinite loop yang dipanggil dari SQL Server Agent, misalnya;
Ini adalah paket infinite loop saya:
Tetapkan 3 Variabel:
IsFileExists - Boolean - 0
FolderLocation - String - C:\Di mana file akan diletakkan\
IsFileExists Boolean - 0
Untuk wadah For Loop:
Setel IsFileExists
variabel seperti di atas.
Siapkan tugas skrip C# dengan ReadOnlyVariable sebagai User::FolderLocation
dan memiliki yang berikut:
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;
}
}
}
Apa yang akan dilakukan pada dasarnya adalah mengawasi lokasi folder untuk file .txt, jika file tersebut tidak ada maka akan tidur selama 10 detik (Anda dapat meningkatkan ini jika Anda mau). Jika file memang ada, itu akan selesai dan paket kemudian akan mengeksekusi paket beban. Namun itu akan terus berjalan, sehingga pada saat file dijatuhkan di dalamnya akan mengeksekusi paket pemuatan lagi.
Pastikan untuk menjalankan paket selamanya loop ini sebagai tugas agen server sql sehingga akan berjalan sepanjang waktu, kami memiliki paket serupa yang berjalan dan tidak pernah menyebabkan masalah.
Juga, pastikan paket input Anda memindahkan/mengarsipkan file dari lokasi folder drop.