2012-11-05 10 views
6

こんにちは私は、一時テーブルを作成し、テーブルにデータを挿入します。私はTempテーブルを使用して特定のUserに参加させます。一時テーブルを削除できませんSQL

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」テーブルが存在しないか、アクセス権がないため、テーブル「#Temp」を削除できません。 SQL 2012を使用しているIm

+0

重複した質問 - http://stackoverflow.com/questions/2642111/drop-table-fails-for-temp-table – Sandeep

+0

@Sandeep tempTableが正しく作成されていないことを示す回答があります。 –

答えて

5

SELECT ... INTO ...ステートメント自体が#Tempテーブルを作成します。ここにCREATE TABLE文は必要ありません。 "CREATE TABLE"文を削除して試してください。

2

データベースには名前が「Temp」のエンティティが既にあります。アクセス許可のためにそのエンティティを削除することはできません。

+0

私はまだエラーが発生します。 #MyTempTableに一時テーブルを変更します。投稿で更新されました –

+0

行を削除ドロップテーブル#Tempとexcuteは動作します –

2

セッションまでしか見えないので、一時表を削除する必要はありません。ストアドプロシージャの実行が

SQL Serverではより多くの一時テーブルは、このリンクを参照してください

OR

を完了したときに

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テーブルをドロップする必要はありません、それが自動的にそれをドロップします

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

0

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

私は同じ問題を経験し、私はCREATE TABLE声明を含め、同じ手順、に私は再利用したいコードのセクション(修正)をコピーしていた - とさえCREATE TABLE文かかわらず - 私は、効果的に二回テーブルを作成していました別のBEGINENDマーカーの間にあり、ステートメントが2番目のCREATEステートメントの前に1番目の 'インスタンス'を削除していました。この正確なエラーが発生しました。

+0

受け入れられた答えは、エラーが起こっている理由を正確に説明しています。あなたの答えはそれに有用なものを加えません。 – trincot

関連する問題