Sql 检查存储过程是否存在

Sql 检查存储过程是否存在,sql,stored-procedures,sql-server-2012,Sql,Stored Procedures,Sql Server 2012,有人知道为什么以下SQL在SQL Server 2012中的“IF”附近返回语法错误或语法错误吗 DROP PROCEDURE IF EXISTS MyStoredProcedure; 我知道我可以使用以下方法: IF EXISTS(SELECT 1 FROM sys.procedures WHERE Name = 'MyStoredProcedure') 但我想知道为什么第一个会产生错误 谢谢 这是有效的: IF EXISTS(SELECT 1 FROM sys.proced

有人知道为什么以下SQL在SQL Server 2012中的“IF”附近返回语法错误或语法错误吗

DROP PROCEDURE IF EXISTS MyStoredProcedure;
我知道我可以使用以下方法:

IF EXISTS(SELECT 1 FROM sys.procedures 
      WHERE Name = 'MyStoredProcedure')
但我想知道为什么第一个会产生错误

谢谢

这是有效的:

IF EXISTS(SELECT 1 FROM sys.procedures 
      WHERE Name = 'MyStoredProcedure')
      print 'yes'
      -- drop procedure mystoredprocedure
您的查询窗口中必须有其他抛出错误的内容,或者您以错误的顺序运行

值得一提的是,这是我在创建过程之前删除/构建过程的步骤。。。我所有保存的proc脚本都有这个

IF OBJECT_ID('dbo.uspSomeProcName') IS NOT NULL
BEGIN
    DROP PROCEDURE dbo.uspSomeProcName
    IF OBJECT_ID('dbo.uspSomeProcName') IS NOT NULL
        PRINT '<<< FAILED DROPPING PROCEDURE dbo.uspSomeProcName>>>'
    ELSE
        PRINT '<<< DROPPED PROCEDURE dbo.uspSomeProcName>>>'
END

简单地说,tsql的第一部分不符合要求。伙计,我需要更多的咖啡。。。我完全错过了。谢谢@DMason!我在这里找到了这种语法:[link]我在我工作的公司的一些旧代码中也看到了这种语法。我猜可能是另一个版本的SQL支持它。这些文档是针对MySql的,而不是针对MS SQL Server的。。SQL Server从未使用过drop if exists语法。感谢@srutzky的澄清!你有没有见过这样一个案例,你得到了这个信息是的,我看到过。。。但只有当它不存在的时候。。。然后我继续前进,重新建造。如果这个过程不存在,那么它就不会进入第一个阶段,开始进入第一个阶段……或者我错过了什么吗?。谢谢@JiggsJedi@斯鲁茨基你是对的。如果该过程不存在,则代码不会到达放置部分。再次检查对象_ID'dbo.uspSomeProcName',以确保拖放成功。