我第一次使用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
Run Code Online (Sandbox Code Playgroud)
要停止在每个文件中剪切和粘贴此样板代码,我希望将此代码放在其自己的存储过程中,以便脚本看起来像这样:
DropIfRequired('SomeProcedureName')
//then the procedure definition
Run Code Online (Sandbox Code Playgroud)
我尝试解决方案是:
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
Run Code Online (Sandbox Code Playgroud)
但是我得到以下错误:
消息102,级别15,状态1,过程DeleteProcedure,第10行'@procedureName'附近的语法不正确.
任何想法如何做我想要的?
完整的答案是:
__PRE__
安德鲁给出的那个只有在您的登录的默认数据库设置为您想要的数据库时才会起作用.使用动态sql时,您将获得一个新的数据库上下文.因此,如果您没有默认数据库集,则将从master执行该命令.