私は本当にこれに困惑しています!私はそれがシンプルだが、本当にそれを理解することはできないと確信しています!T-SQL IF文の説明
DECLARE @jobid INT = 100
IF (@JobID >= 0)
BEGIN
SELECT * into #tmp FROM Persons
end
ELSE
BEGIN
SELECT * into #tmp FROM Persons1
end
#tmp
テーブルが既に存在するというエラーが表示されます。なぜそれが両方の声明を検証するのだろう!
もちろん、元のクエリは膨大で、それ以上は行っていますが、それは私のエラーを説明するためのサンプルです。
誰でも説明できますか?
#tmp
テーブルを削除したり名前を変更しようとしても、エンジンは両方のステートメントを検証します。
私は2008 R2を使用しています。リンクサーバー上でそれを実行
おかげ ジェイソン
「あなたは '落ちていない原因:あなたは前にそのブロックにどこでもあなたのクエリで
#tmp
を使用していない場合、あなたはそれが常に移動する準備ができます確保するために、以下の前のコードのそのブロックのような何かを行うことができます#tmp'を前回実行しましたか? –「ELSE」の後に「BEGIN」が必要ないとはかなり確信しています。また、MSDN ELSEによると、ENDの後に来る必要がありますか? http://msdn.microsoft.com/en-us/library/ms182717.aspx –
@ p.campbell - そうではありません。コードを試してみると、ランタイムではなくエラーを発生させるパーサーであることがわかります。エラーメッセージはほとんど同じです。パーサーエラーは 'Msg 2714、Level 16、State 1'を返し、ランタイムエラーは' Msg 2714、Level 16、State 6'を返します。 –