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.