首页 文章

为什么临时表没有从SQL Server中的tempdb中删除?

提问于
浏览
3

我创建了一个包含7个临时表的存储过程,每个临时表在自己的工作结束时被删除 .

我从一个Web服务和相同的Web服务调用SP,我们用于不同的实例 .

我强行删除了每个临时表,但是当SP执行时,它不会删除位于“tempdb / Temporary Table”中的任何临时表 . 而且,当我打开我的应用程序的新实例并尝试执行相同的SP时,它将修改相同的临时表 .

这给我带来了麻烦 . 当SP同时执行时它将锁定表,它将锁定表,我的sp无法产生结果并抛出异常 .

所以我想在操作结束时删除临时表 . 请帮忙 .

4 回答

  • 3

    我不能告诉你为什么会这样,但我之前也已经处理过了 . 尝试在SP的开头或结尾清理表或使用表变量 .

    IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
    
  • 0

    如果您使用了许多Temp表并且在您的sp之间存在一些错误并且您的drop语句无法执行,则可能发生这种情况 .
    所以它总是最好的做法

    IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
    

    在SP的开始 .

  • 0

    要强制删除临时表使用

    BEGIN TRY DROP #MyTable END TRY BEGIN CATCH END CATCH
    

    丑陋但有效 . 为每个临时表使用单独的TRY .

  • 7
    IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName
    

    我认为这不会起作用,因为我们知道sql server store临时表名称添加了一些额外的字符 . if exists(从tempdb.sys.tables中选择1,其中名称如'#TableName%')DROP TABLE #TableName

相关问题