【发布时间】:2017-06-02 19:53:48
【问题描述】:
我目前正在维护一个超过 17 年的 SQL Server 数据库,其中包含大量未使用和过时的工件。
在过去的几个月里,我们一直在对数据库进行概要分析,以确定 1800 多个存储过程中的哪些实际正在被使用,哪些是我们可以安全删除的。截至目前,我们计划删除大约 1300 个列表。
此数据库也在我们的 SQL Server 数据库项目中的源代码控制下签入。
现在,我想做的是生成一个脚本来删除 1300 个过程,并首先将该脚本应用于数据库项目,然后再将该脚本应用于我们的开发环境。但我似乎无法找到通过脚本更新项目的方法。
我尝试过执行Import > Script 并使用DROP PROCEDURE 命令导入.sql 文件,但它会引发以下错误,同时不会从项目中删除该过程:
在您提供给导入操作的脚本中,一个或多个语句没有被完全理解。这些语句已移至 ScriptsIgnoredOnImport.sql 文件。查看文件内容以获取更多信息。
测试的文件内容如下:
Drop Procedure spProcedureName;
我可以浏览项目并逐个删除每个程序...但是要删除的有1300多个...
有没有办法对数据库项目进行批量更新(通过脚本或其他方式)以删除多个数据库对象?
其他信息:
- 从项目中创建一个 shell 数据库并对其进行更新将证明与手动删除 1,300 个存储过程一样多。这是因为我们计划删除的许多存储过程包含对表、视图、函数、
OPENROWSET连接和其他过程的过时/无效引用。因此,部署脚本会失败,如果不修改脚本中的各个无效对象,就无法创建 shell 数据库。 - 获取当前数据库的备份/恢复也不是一个可行的解决方案,因为当前数据库的大小略高于 3 TB。
由于上述限制,我只是在寻找一种可以直接应用于数据库项目而不依赖于辅助物理数据库的解决方案。
【问题讨论】:
-
最简单的是
DROP PROCEDURE command listing SPs separated by a commaSample Code -
否则您可以将 SP 的名称推送到临时表中,然后使用 query 循环它
-
@Joby 我的问题不是如何从数据库中删除过程,而是如何从数据库项目中批量删除过程。
-
@Siyual 如何检索未使用的 1300 SP
-
@AlfaizAhmed 这有点太复杂,无法在评论中详细介绍,但基本上,我编写了一个服务,定期检查最近使用的存储过程统计信息并在几个月内编译这些结果.
标签: sql-server visual-studio-2012 database-project