您好我创建一个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
答案 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
语句位于单独的BEGIN
和END
标记之间,并且有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