In der Vergangenheit habe ich dies beispielsweise mit einem Endlosschleifenpaket getan, das vom SQL Server Agent aufgerufen wurde;
Dies ist mein Endlosschleifenpaket:
Stellen Sie 3 Variablen ein:
IsFileExists – Boolesch – 0
FolderLocation - String - C:\Wo die Datei abgelegt werden soll\
IsFileExists Boolesch - 0
Für den For-Schleifen-Container:
Legen Sie IsFileExists
fest Variablen wie oben.
Richten Sie eine C#-Skriptaufgabe mit der ReadOnlyVariable als User::FolderLocation
ein und habe folgendes:
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;
}
}
}
Was dies tun wird, ist im Wesentlichen, den Ordnerpfad für eine .txt-Datei im Auge zu behalten, wenn die Datei nicht dort ist, wird sie für 10 Sekunden schlafen (Sie können dies erhöhen, wenn Sie möchten). Wenn die Datei vorhanden ist, wird sie abgeschlossen und das Paket führt dann das Ladepaket aus. Es wird jedoch weiterhin ausgeführt, sodass das nächste Mal, wenn eine Datei abgelegt wird, das Ladepaket erneut ausgeführt wird.
Stellen Sie sicher, dass Sie dieses Endlos-Schleife-Paket als SQL-Server-Agent-Job ausführen, damit es die ganze Zeit läuft, wir haben ein ähnliches Paket am Laufen und es hat nie Probleme verursacht.
Stellen Sie außerdem sicher, dass Ihr Eingabepaket die Datei aus dem Ablageordner verschiebt/archiviert.