Запрос ssisdb, чтобы найти имя пакетов

Я запрашивал slog catlog, чтобы узнать имя всех пакетов в каталоге.
В проекте Folder1 всего 6 пакетов, но запрос дает 9 записей

 1. SELECT P.NAME FROM SSISDB.internal.projects PRJ INNER JOIN
    SSISDB.internal.packages P ON
    P.project_version_lsn=PRJ.object_version_lsn WHERE
    PRJ.NAME='Folder1'

Показывает ли он также удаленные пакеты из проекта.

2 ответа

Решение

Они не удалены, это часть исторического отслеживания. Вы, вероятно, хотели запрос, более похожий на

SELECT
    F.name AS FolderName
,   P.name AS ProjectName
,   PKG.name AS PackageName
FROM
    ssisdb.catalog.folders AS F
    INNER JOIN 
        SSISDB.catalog.projects AS P
        ON P.folder_id = F.folder_id
    INNER JOIN
        SSISDB.catalog.packages AS PKG
        ON PKG.project_id = P.project_id
ORDER BY
    F.name
,   P.name
,   PKG.name;

Это отражает то, что Папки содержат Проекты, а Проекты содержат Пакеты, что обеспечит точный "адрес" для данного пакета.

[SSISDB].[internal].[packages] стол и другое internal Таблицы могут содержать несколько версий ваших пакетов.

Вы должны использовать catalog Просмотры.

SELECT [projects].[name], [packages].[name], *
FROM [SSISDB].[catalog].[packages]
INNER JOIN [SSISDB].[catalog].[projects]
    ON [packages].[project_id] = [projects].[project_id]
ORDER BY [packages].[name]

catalog Представления будут возвращать только активные объекты.

Другие вопросы по тегам