6

こんにちは、一時テーブルを作成し、テーブルにデータを挿入しています。一時テーブルを使用して、特定のユーザーに参加させます。

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サーバーのその他の一時テーブルについては、このリンクを参照してください

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

于 2012-11-05T06:25:09.833 に答える
0

コードで同じテーブルを 2 回作成している可能性があります。

私は同じ問題を経験しました.再利用したい(変更した)コードのセクションをCREATE TABLEステートメントを含む同じプロシージャにコピーしました-テーブルを効果的に2回作成していました.は、2 番目のステートメントの前に 1 番目の「インスタンス」を削除するステートメントでした。この正確なエラーが発生しました。 CREATE TABLEBEGINENDDROP TABLECREATE

于 2016-08-18T19:53:07.480 に答える
0

一時テーブルを削除する方法に関する Microsoft ページからの公式の回答が役に立ちました。要するに、私はこれを使用しましたが、うまくいきました。

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 に答える