2016-07-28 11 views
1

現在、SQL Serverでクエリを実行しようとしています。クエリ内でこのような部分があります:SQL Serverのグローバルテンポラリテーブルが破棄されたまま存在する

... 
IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects 
      WHERE id = object_id(N'tempdb.dbo.[##Emp]')) 
    DROP TABLE ##Emp 

SELECT * 
INTO ##Emp 
FROM #Emp (nolock) 
... 

事は、私は##Empがすでに存在していると言ういくつかのエラーを取得しておくです。 IF EXIST DROPで既にチェックしたとき、どうすればこのことが可能になりますか?私はIF EXIST部分を削除して手動でテーブルを削除しようとしましたが、テーブルがすでに存在しているとは言います。

+1

'if object_id( 'tempdb .. [## Emp]')はnullではありません。 – NEER

+0

私は同じ問題を再現することができませんでした。同じテーブル – TheGameiswar

+0

を再度作成しようとしているコードの一部にあるかもしれません。また、他のセッションで並行して作成することもできます。 – TheGameiswar

答えて

0

チェックシンプルで一時テーブルの状態の両方:その後

select * from tempdb..sysobjects where name like '%Emp%' 

両方の削除やレクリエーションを処理するためにSHUREこと:@のダミアン・-不信者として

BEGIN TRANSACTION 
    ... 
    IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..[#Emp]')) 
     DROP TABLE #Emp 
    CREATE TABLE #Emp(exampleId uniqueidentifier); 
    ... 
    IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = object_id(N'tempdb.dbo.[##Emp]')) 
     DROP TABLE ##Emp 

    SELECT * 
    INTO ##Emp 
    FROM #Emp 
    ... 
COMMIT TRANSACTION 

あなたが本当にそれを必要とするかどうかを二重に確認することは、非常に面倒なことがあります。
この場合も同様の名前を持つのは非常に混乱します。

関連する問題