In einem Projekt hatte ich neulich die Anforderung zu kontrollieren, ob die im Integration Services Katalog auf dem SQL server enthaltenen SSIS-Pakete aktuell sind.
Bei dem Kunden gab es sehr viele Projekte und noch mehr Pakete. Dazu wurden nicht nur die Projekte als ganzes deployt (via ispac) sondern auch einzelne Pakete auch separat. Deswegen reichte es nicht die aktuelle Projekt-Version zu betrachten.
Statt dessen habe ich folgendes Statement verwendet:
use SSISDB; with e as ( select p.name, xs.execution_path ,cast(xs.start_time as datetime2(0)) as start_time ,x.project_version_lsn ,p.version_build from internal.executables x join internal.executable_statistics xs on x.executable_id = xs.executable_id join internal.packages p on x.project_id = p.project_id and x.project_version_lsn = p.project_version_lsn and x.package_name = p.name where x.executable_name + '.dtsx'= x.package_name ) select e.name, e.start_time, e.version_build from e where e.start_time = (select max(start_time) from e e2 Where e2.name = e.name) order by 1
Dieses Statement liefert mir zu allen Paketen den letzte Ausführungs-Zeitstempel und die Version Build dieses Laufs. Da (bei uns) sicher war, dass die zuletzt ausgeführte Version auch die aktuelle Version war, konnte ich so die Überprüfung vereinfachen.