在SQL Server中自动删除旧的存储过程

mik*_*sey 3 sql-server stored-procedures

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

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

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

Con*_*rix 6

您可以将其添加到过程脚本的顶部.(只需将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
Run Code Online (Sandbox Code Playgroud)

或者您可以编写ALTER PROC,但如果您将工作保存为脚本以便稍后部署到可能没有该过程的数据库,则可能会出现问题

另外,您可以通过右键单击现有过程并选择,始终让SQL服务器为您生成此项 Script Stored Procedure as -> DROP and CREATE to -> ...

您还可以使用模板资源管理器Ctrl+Alt+T并使用Drop Stored Procedure模板(下面是默认设置),然后使用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
Run Code Online (Sandbox Code Playgroud)