-2

SQLServer で非常に単純なテスト ケースを作成しましたが、それが機能しない理由がよくわかりません。

create table #temp(
  id int,
  val int)

insert into #temp values (1, 1), (2, 2)
select * from #temp

if object_id('tempdb..#temp') is not null
   drop table #temp

create table #temp(
  id int,
  val int)

insert into #temp values (1, 1), (2, 2)
select * from #temp
4

2 に答える 2

4

次のドキュメントを参照してください。

1 つのストアド プロシージャまたはバッチ内に複数の一時テーブルを作成する場合は、それらに異なる名前を付ける必要があります。

コードで次のエラーが発生します。

メッセージ 2714、レベル 16、状態 1、行 11
データベースには、'#temp' という名前のオブジェクトが既に存在します。

これは、テーブルが削除されて再作成できないためではありません。このコードは決して実行されず、パーサーは実際に、同じテーブルを 2 回作成しようとしているのを認識します (そして、DROPコマンドのようなロジックを認識できません)。

2 つの異なる #temp テーブル名を使用する以外に、別の回避策として、テーブルを 1 回だけ作成し、最初のコードの作成が完了したら切り捨てます。

于 2013-09-13T01:58:15.973 に答える