繁体   English   中英

无法删除临时表SQL

[英]Can't drop temp table SQL

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

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

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

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

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/

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

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

微软关于如何删除临时表的官方回答我有帮助。 总之,我使用它,它工作得很好。

use tempdb
go

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

使用MS SQL 2017

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM