2017-04-25 16 views
0

こんにちは私はどこの条件に基づいてレコードを挿入しようとしている一時テーブルがありますが、それは既に存在するというエラーをスローします。 名前を変更しようとしましたが、セッションが終了すると一時表が削除されるため、問題はありません。一時テーブルがすでに存在しています

私は質問を正しく書いていると思います。私は#TEMP_VALIDATION

エラーメッセージ

FROM #TEMP_REJECTを挿入しようとしています

SELECT [Name] 
     INTO #TEMP_REJECT 
     FROM #TEMP_VALIDATION 
     WHERE Name = @Name 

は "既にデータベースに '#TEMP_REJECT' という名前のオブジェクトがあります。"

お勧めします。

ありがとうございました。 R

+0

あなたは私たちにあなたが遭遇した正確なエラーメッセージを与えることができなりましたか?また、表の定義も教えてください。 – Hybris95

+1

こんにちは私は、エラーメッセージ '既にデータベースに' #TEMP_REJECT 'という名前のオブジェクトがあります。 – BRDroid

+0

トピックから外すと、代わりにテーブル変数を検討する価値があるかもしれません - http:// stackoverflow。com/questions/11857789/i-use-a-table-variable-vs-temporary-table-in-sql-server – user5226582

答えて

2

SQL Serverは、テーブルが存在しない場合は存在しないことを通知しません。

私はあなたのselect文の前で

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
    DROP TABLE #TEMP_REJECT 

を追加することを示唆しています。これにより、selectが実行されたときにtempテーブルが存在しないことが保証されます。

だからあなたの文は

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
     DROP TABLE #TEMP_REJECT 

SELECT [Name] 
      INTO #TEMP_REJECT 
      FROM #TEMP_VALIDATION 
      WHERE Name = @Name 
+0

ありがとうございました。 – BRDroid

2

この答えはあなたを助ける: https://stackoverflow.com/a/8560644/3635715

短いようにするには:SELECT INTOは、レコードを挿入し、テーブルを作成します。 INSERT INTOレコードのみを挿入します。 #TEMP_REJECTがすでに存在しているので、それが再びテーブルを作成することはできませんので

は、だからあなたの場合には、SELECT INTOは拒否され、あなたが最初SELECT INTOINSERT INTOを使用する必要があります。

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
BEGIN 
    INSERT INTO #TEMP_REJECT 
    SELECT [Name] 
    FROM #TEMP_VALIDATION 
    WHERE Name = @Name 
END 
ELSE 
BEGIN 
    SELECT [Name] 
    INTO #TEMP_REJECT 
    FROM #TEMP_VALIDATION 
    WHERE Name = @Name 
END 

参考文献:
INTO Clause
INSERT Clause

1

( 'tempdbの..#のTEMP_REJECT')OBJECT_ID場合

を挿入する前にチェックしてみ

SELECT [Name] 
     INTO #TEMP_REJECT 
     FROM #TEMP_VALIDATION 
     WHERE Name = @Name 
ヌル ドロップテーブル#TEMP_REJECTではありません

SQLによれば、テンポラリテーブルがあり、挿入前にテーブルが存在する必要があります。

関連する問題