我正在 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/