导入包后,即使删除后仍保留在数据库中

时间:2013-01-20 15:33:56

标签: ssis sql-server-2008-r2

我是一名SQL Server新手。我将存储在我的文件系统中的包导入我的SQL Server 2008R2数据库。后来我从文件系统中删除了包。但是,程序包继续保留在SQL Server数据库中,甚至执行!

我知之甚少意味着这不应该发生,因为即使SQL Server也会引用存储在文件系统中的那个包。所以我的问题是:这种行为是否正常?如果不是可能的原因

Cheerio

2 个答案:

答案 0 :(得分:1)

当软件包在文件系统上时,它就能很好地放在你想要的地方。当程序包在数据库中时,如果您使用程序包部署模型,它将存储在{2008; 2008R2和2012的dbo.sysssispackage中的msdb目录中。 2005年使用dbo.sysdtspackages90和项目部署模型中的2012将使用SSISDB目录。

所以现在你知道它在一个表中,这是代理能够引用的。如果您想要删除它,请调用适当的存储过程。在这种情况下,它是msdb.dbo.sp_ssis_deletepackage它需要2个参数,包的名称和包所在的文件夹。根文件夹是00000000-0000-0000-0000-000000000000。否则,使用正确的包名运行以下查询,它将生成删除所述包所需的调用。

与往常一样,在盲目运行之前评估该声明。

SELECT 
    P.name
,   P.folderid
,   'EXECUTE msdb.dbo.sp_ssis_deletepackage @name = ''' + P.name + ''', @folderid = ''' + CAST(P.folderid as varchar(50)) + '''' AS run_me
FROM 
    dbo.sysssispackages AS P
WHERE
    P.name = 'Package'

答案 1 :(得分:0)

经过多次思考并询问一些严肃的sql-savvy的人,我觉得这种行为非常自然。创建这两个文件夹只是为了区分获取包的位置。导入后,包将保存在数据库中。然后它的位置并不重要。在我的示例中,创建了包的副本并将其存储在数据库中。    谢谢大家的帮助和时间:)