【问题标题】:checking for existence of a stored procedure检查存储过程是否存在
【发布时间】:2014-07-16 14:42:52
【问题描述】:

有人知道为什么以下 SQL 在 SQL Server 2012 中返回语法错误('IF' 附近的语法不正确)吗?

DROP PROCEDURE IF EXISTS MyStoredProcedure;

我知道我可以改用以下内容:

IF EXISTS(SELECT 1 FROM sys.procedures 
      WHERE Name = 'MyStoredProcedure')

但我想知道为什么第一个会产生错误。

谢谢!

【问题讨论】:

  • 简单来说,tsql的第一位不跟syntax for dropping procedures
  • 伙计,我需要更多的咖啡......我完全错过了。
  • 谢谢@DMason!我从这里找到了该语法:[link] (dev.mysql.com/doc/refman/5.0/en/drop-procedure.html) 我还在我工作的公司的一些旧代码中看到了它。我的猜测是可能有不同版本的 SQL 支持它。
  • 该文档适用于 MySql,而不是 MS SQL Server。 ..SQL Server 从来没有drop if exists 语法。
  • 感谢@srutzky 的澄清!

标签: sql stored-procedures sql-server-2012


【解决方案1】:

这行得通:

IF EXISTS(SELECT 1 FROM sys.procedures 
      WHERE Name = 'MyStoredProcedure')
      print 'yes'
      -- drop procedure mystoredprocedure

您的查询窗口中一定有其他东西引发了错误,或者您以错误的顺序运行。

对于它的价值,这是我在CREATE PROCEDURE...之前删除/构建程序的“目标”...我所有保存的 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

【讨论】:

  • 您有没有遇到过收到“
  • 是的,我见过它......但只有当它不存在时......所以我继续前进并重新构建。
  • 如果 proc 不存在,那么它不会进入第一个 BEGIN 以首先到达 DROP...或者我错过了什么?..
  • 感谢@JiggsJedi! @srutzky 你是对的。如果该过程不存在,则代码不会到达放置部分。再次检查 OBJECT_ID('dbo.uspSomeProcName') 以确保 Drop 有效。
猜你喜欢
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多