【问题标题】:Can't drop temp table SQL无法删除临时表 SQL
【发布时间】:2012-11-05 06:15:43
【问题描述】:

您好,我正在创建一个临时表并将数据插入到表中。我将使用 Temp 表将其加入特定用户。

CREATE TABLE #MyTempTable
(
    UsersId int,
    ValautionCount int 
)

    SELECT
        U.UserId, 
        COUNT(*) AS ValautionCount
    INTO  #MyTempTable
    FROM 
        Users U
        Right JOIN Valuation V ON V.ValuationUser = U.UserId
    GROUP BY 
        U.UserId



DROP TABLE #MyTempTable

当我运行这个查询时,我得到这个错误:数据库中已经有一个名为“#Temp”的对象。

但是当我运行此查询DROP TABLE #MyTempTable 时,我收到此错误:无法删除表'#Temp',因为它不存在或您没有权限。 我正在使用 SQL 2012

【问题讨论】:

标签: sql


【解决方案1】:

SELECT ... INTO ... 语句本身创建#Temp 表。这里不需要 CREATE TABLE 语句。删除“CREATE TABLE”语句并尝试。

【讨论】:

    【解决方案2】:

    您的数据库中已经有一个名为“Temp”的实体。由于访问权限,您无法删除该实体。

    【讨论】:

    • 即使我将临时表更改为#MyTempTable,我仍然会收到错误消息。在帖子中更新
    【解决方案3】:

    无需删除临时表,因为它仅在会话之前可见。

    Create PROCEDURE proctemptable
    BEGIN
    
    IF object_id('tempdb..#Temp') is not null  // Try this hope this will work
    BEGIN
      DROP TABLE #Temp
    END
    
    CREATE TABLE #Temp
    (
        UsersId int,
        ValautionCount int 
    )
    
    SELECT
        U.UserId, 
        COUNT(*) AS ValautionCount
    INTO  #Temp
    FROM 
        Users U
        Right JOIN Valuation V ON V.ValuationUser = U.UserId
    GROUP BY 
        U.UserId
    
    //DROP TABLE #Temp 
    
    END
    

    #Temp表不需要删除,存储过程执行完成后会自动删除

    更多sql server中的临时表请参考此链接

    http://www.simple-talk.com/sql/t-sql-programming/temporary-tables-in-sql-server/

    【讨论】:

      【解决方案4】:

      您可能在代码中创建了两次同一个表。

      我遇到了同样的问题,我将一段我想重用(修改)的代码复制到同一个过程中,包括 CREATE TABLE 语句 - 我有效地创建了表两次 -即使CREATE TABLE 语句位于单独的BEGINEND 标记之间,并且有一个DROP TABLE 语句在第二个CREATE 语句之前删除了第一个“实例”,但我遇到了这个确切的错误。

      【讨论】:

      • 接受的答案准确解释了错误发生的原因。你的回答并没有增加任何有用的东西。
      【解决方案5】:

      Microsoft page on how to drop temp table 的官方回答帮助了我。 简而言之,我使用了它并且效果很好。

      use tempdb
      go
      
      IF OBJECT_ID(N'tempdb..#yourtemptable', N'U') IS NOT NULL   
      DROP TABLE #yourtemptable;  
      GO  
      

      使用 MS SQL 2017

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多