1
SELECT INTOは、実行前にTempDBで#Object名を予約しますか?
デバッグに役立つQuickieプロシージャをまとめると、コンパイラでエラーのように見えるものに遭遇しました。 create proc spFoo @param bit as begin if @param = 0 begin select * into #bar from [master].dbo.spt_values -- where number between ... end else begin select top 10 * into #bar from [master].dbo.spt_values order by newid(); end; end; 上記を試行すると、次のエラーが返されます メッセージ2714、レベル16、状態1、プロシージャspFoo、行19 データベースにはすでに「#bar」という名前のオブジェクトがあります。 人間が読める意味では、プロシージャは問題ないように見えます。ブロックselect into内にラップされているため、実行されるステートメントは1つだけですif-else。ただし、SQLサーバーは、ステートメントが互いに論理的に除外されていることを確認できません。おそらくもっと混乱するのdrop table #fooは、以下のようにがif-elseブロック内に配置されたときにエラーが残ることです(これにより、オブジェクト名の割り当てを解除するようコンパイラーに指示すると想定されます)。 create proc spFoo …