无法删除临时表SQL

时间:2012-11-05 06:15:43

标签: sql

您好我创建一个Temp表并将数据插入表。我将使用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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

不需要删除临时表,因为它只在会话之前可见。

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表,它将在存储过程执行完成后自动删除

OR

请参阅此链接以获取sql server

中的更多临时表

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

答案 3 :(得分:0)

您可能在代码中两次创建相同的表格。

我遇到了同样的问题,我已经将我希望重用(修改)的一段代码复制到同一个程序中,包括CREATE TABLE语句 - 我实际上是在创建表两次 - 即使CREATE TABLE语句位于单独的BEGINEND标记之间,并且有DROP TABLE语句在第二个{{1之前删除第一个'实例'我发现了这个确切的错误。

答案 4 :(得分:0)

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