我第一次使用SqlServer,在我们的每个创建过程脚本中都有以下代码块,用于删除已存在的过程:
IF EXISTS (SELECT *
FROM information_schema.routines
WHERE routine_name = 'SomeProcedureName'
AND routine_type = 'PROCEDURE'
BEGIN
DROP PROCEDURE SomeProcedureName
END
//then the procedure definition
为了避免在每个文件中都复制和粘贴此样板代码,我想将此代码放入自己的存储过程中,这样脚本看起来会像这样:
DropIfRequired('SomeProcedureName')
//then the procedure definition
我尝试的解决方案是:
CREATE PROCEDURE DropIfRequired
(
@procedureName varchar
)
AS
IF EXISTS (SELECT * FROM information_schema.routines
WHERE routine_name = @procedureName
AND routine_type = 'PROCEDURE')
BEGIN
DROP PROCEDURE @procedureName
END
但是我接下来遇到了以下错误:
Msg 102,级别 15,状态 1,过程 DeleteProcedure,行 10 @procedureName 附近有语法错误。
有什么办法可以实现我想要的效果吗?