7

我正在查询 ssis 目录以找出目录中所有包的名称。
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'

它是否也显示了项目中已删除的包。

4

2 回答 2

12

它们不会被删除,这是历史跟踪的一部分。您可能希望查询更类似于

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;

这反映了文件夹包含项目和项目包含包,因此将为给定包提供确切的“地址”。

于 2016-11-07T17:03:10.607 回答
4

[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视图将仅返回活动对象。

于 2016-11-07T17:01:13.317 回答