我是 SQL Server 新手。我将存储在我的文件系统上的一个包导入到我的 SQL Server 2008R2 数据库中。后来我从文件系统中删除了这个包。但是,该包继续保留在 SQL Server 数据库中,甚至可以执行!
我所知道的一点是这不应该发生,因为即使是 SQL Server 也会引用存储在文件系统中的那个包。所以我的问题是:这种行为正常吗?如果不是,可能是什么原因
切里奥
我是 SQL Server 新手。我将存储在我的文件系统上的一个包导入到我的 SQL Server 2008R2 数据库中。后来我从文件系统中删除了这个包。但是,该包继续保留在 SQL Server 数据库中,甚至可以执行!
我所知道的一点是这不应该发生,因为即使是 SQL Server 也会引用存储在文件系统中的那个包。所以我的问题是:这种行为正常吗?如果不是,可能是什么原因
切里奥
当包在文件系统上时,它就可以放在你想要的任何地方。dbo.sysssispackage
当包在数据库中时,如果您使用包部署模型,它将存储在 2008/2008R2 和 2012 的 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'
经过深思熟虑并询问了一些精通sql的认真的人,我觉得这种行为很自然。创建这两个文件夹只是为了区分获取包的来源。导入后,包将保存在数据库中。那么它的位置并不重要。在我的示例中,创建了包的副本并将其存储在数据库中。谢谢大家的帮助和时间:)