【问题标题】:How To Drop Temporary SP If Exists in Sql Server 2005如果 Sql Server 2005 中存在临时 SP,如何删除
【发布时间】:2011-07-04 09:35:36
【问题描述】:

我的问题很简单!如果存在,如何删除临时存储过程?这是因为当我在脚本中创建临时 SP 时,它会在我第二次运行时引发错误,例如“数据库中已经有一个名为 '#sp_name' 的对象”。我不想向用户显示此消息。 请帮我。非常感谢您的解决方案!

【问题讨论】:

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


    【解决方案1】:

    临时触发的丢弃方式与永久触发的丢弃方式相同。 请看下面的代码:

    
    -- Create test temp. proc
    CREATE PROC #tempMyProc as
    Begin
     print 'Temp proc'
    END
    GO
    -- Drop the above proc
    IF OBJECT_ID('tempdb..#tempMyProc') IS NOT NULL
    BEGIN
        DROP PROC #tempMyProc
    END
    

    【讨论】:

    • 谢谢。有用。谢谢你拉姆。我认为所有 Temp SP 都存储在 tempdb 数据库中。是这样吗 ?请解释一下。
    • 不客气!...是的,所有使用 # 号创建的临时对象(表、过程)都将在 tempDB 中自动创建。现在临时对象中还有其他类型称为全局临时对象(使用前面的## 创建)。甚至这些都是在 tempDB 中创建的。
    • 在此处使用 IF OBJECT_ID('tempdb..#tempMyProc') IS NOT NULL 很重要。我有一个使用 IF OBJECT_ID('tempdb..#tempMyProc') > 0 的代码生成器,并且此代码在 SQL Server 2012 下失败,因为 OBJECT_ID 变为负数。
    【解决方案2】:
    IF EXISTS (SELECT * FROM sys.procedures WHERE name = 'baz')
    DROP PROCEDURE baz
    

    【讨论】:

    • 嗨,汤姆!我试过你的代码。由于它是临时 Sp,它不符合 If 条件。它不会选择 SP。因此它不会放弃程序。
    • 您能详细说明一下您所说的“临时”是什么意思吗?你是如何创建它的?
    • 耶!临时存储过程意味着存储过程存在于会话中。通常它表示为 # 后跟 SP 名称。有关详细信息,请参阅 msdn 站点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2011-11-07
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多