1. ホーム
  2. sql

[解決済み] データベースに'#tmptable'という名前のオブジェクトがすでに存在します。

2022-02-07 11:26:02

質問

ストアドプロシージャを実行しようとしているが、既存の一時テーブルの問題が発生した。

SELECT ...
INTO #tmpUnidadesPresupuestadas 
FROM proce.table1 

--Insertar in table src..
INSERT INTO table (
 ....) 
SELECT
....
FROM
    #tmpUnidadesPresupuestadas

こんなメッセージが出ます。

という名前のオブジェクトが既に存在しています。 '#tmpUnidadesPresupuestadas' がデータベース内にあります。

どうすれば解決できますか?回答

どのように解決するのですか?

tempテーブルは、現在のセッションの間、ずっと生きています。このステートメントを複数回実行すると、テーブルがすでに存在することになります。 それを検知して切り捨てるか、あるいは、選択する前に drop が存在する場合は、それを使用します。

DROP TABLE IF EXISTS #tmpUnidadesPresupuestadas

SQL Server 2016 より前の場合は、そのようにドロップします。

IF OBJECT_ID('tempdb.dbo.#tmpUnidadesPresupuestadas', 'U') IS NOT NULL
  DROP TABLE #tmpUnidadesPresupuestadas;