无法删除临时表SQL

问题描述 投票:6回答:5

您好我创建一个临时表并将数据插入表。我将使用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
5个回答
5
投票

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


2
投票

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


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

要么

请参阅此链接以获取sql server中的更多临时表

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


0
投票

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

我遇到了同样的问题,我已经将我希望重用(修改)的一段代码复制到同一个程序中,包括一个CREATE TABLE语句 - 我有效地创建了两次表 - 尽管CREATE TABLE语句介于单独的BEGINEND之间标记,并且在第二个DROP TABLE语句之前有一个CREATE语句丢弃第一个'实例',我遇到了这个确切的错误。


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

© www.soinside.com 2019 - 2024. All rights reserved.