sql-server - 自动删除 SQL Server 中的旧存储过程

标签 sql-server stored-procedures

我正在 SQL Server 2008 中以交互方式编写存储过程。使用 SQL Server Management Studio 时,每次进行更新时,我都必须手动刷新 Programmability 文件夹,然后右键单击,然后删除,然后确定。我也可以运行查询来删除存储过程。

在第一次执行代码(来自实际的存储过程代码,而不是 exec 命令)时,我是否可以将某些函数放入存储过程中,以检查是否存在现有的存储过程,如果存在,则 DROP并替换为新代码?

或者,由于版本控制,这是一个坏主意吗?

最佳答案

您可以将其添加到过程脚本的顶部。 (只需将 ownerName 和 ProcName 替换为实际值。

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[OwnerName].[ProcName]') AND type in (N'P', N'PC'))
DROP PROCEDURE [OwnerName].[ProcName]
GO

或者你可以写 ALTER PROC ,但是如果您将工作保存为脚本以便稍后部署到可能没有该过程的数据库,这可能是一个问题

顺便说一句,您始终可以通过右键单击现有过程并选择 Script Stored Procedure as -> DROP and CREATE to -> ... 来让 SQL Server 为您生成此文件。

您也可以使用模板资源管理器 Ctrl+Alt+T 并使用删除存储过程模板(以下是默认设置),然后使用 Query -> Specify Values for Template Parameters
-- =======================================================
-- Drop Stored Procedure 
-- =======================================================

-- Drop stored procedure if it already exists
IF EXISTS (
  SELECT * 
    FROM INFORMATION_SCHEMA.ROUTINES 
   WHERE SPECIFIC_SCHEMA = N'<Schema_Name, sysname, Schema_Name>'
     AND SPECIFIC_NAME = N'<Procedure_Name, sysname, Procedure_Name>' 
)
   DROP PROCEDURE <Schema_Name, sysname, Schema_Name>.<Procedure_Name, sysname, Procedure_Name>
GO

关于sql-server - 自动删除 SQL Server 中的旧存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434998/

相关文章:

c# - 我们可以将所有 SQL 脚本转换为 Linq-to-SQL 表达式吗?或者有任何限制吗?

sql - 如何在 SQL 2005 中获取分区范围

sql-server - 存储过程给出与 tsql 不同的结果集,仅在某些服务器上

java - 使用 Callable 语句在数据库中批量插入存储过程

c# - EF Core 3.1 在定义实体之间的主键关系时创建名称为 '1' 的重复列

sql-server - 使用 SSIS 2012 将数据从 Sql Server 2014 导出到 Excel 文件

mysql - 如何修复必须在存储过程中声明的标识符?

mysql - 处理级联删除: Are there ways to do this automatically in mySQL

sql-server - 存储过程调用不同架构中的数据

java - 在 SQLException 中获取 OUT 参数