6

您好我正在创建一个临时表并将数据插入到表中。我将使用 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

4

5 回答 5

5

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

于 2012-11-05T06:24:48.697 回答
2

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

于 2012-11-05T06:19:04.383 回答
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/

于 2012-11-05T06:25:09.833 回答
0

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

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

于 2016-08-18T19:53:07.480 回答
0

微软页面上关于如何删除临时表的官方回答帮助了我。简而言之,我使用了它并且效果很好。

use tempdb
go

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

使用 MS SQL 2017

于 2019-02-24T09:54:53.263 回答