SQL Server 2005で次のステートメントを実行すると、最初の実行時に成功し、後続の実行で失敗します。これが何を意味するのか選択が不一致の列で失敗する
IF OBJECT_ID('tempdb..#test') IS NULL
CREATE TABLE #test (GoodColumn INT)
IF 1 = 0
SELECT BadColumn
FROM #test
は何かが、私はスクリプトが「コンパイル」されたときに、テーブルの上に存在する列に対する私のSELECT文でアクセスしていますが、列を比較していることです。私の目的のために、これは望ましくない機能性です。私の質問は、このコードが実行されるたびに正常に実行されるように何かができるかどうか、あるいはそれが可能でない場合は、なぜデモンストレーションされた機能が望ましいのかを説明できるかもしれません。私が現在行っている唯一の解決策は、選択をEXECまたは選択*で囲むことですが、どちらの解決策も嫌いです。
おかげで、この動作は、プログラマの観点から、「望ましい」であるか否かは、
私はSQLで両方のソリューションを試してみましたが、両方が「無効な列名 『BadColumn』で失敗します。" –
一時オブジェクトが存在しない場合、このdbo.test procを作成して繰り返し実行することができます。一時オブジェクトが存在する場合、エラーが発生します。 –
+1。テーブルはBadCOlumnが見つからないことを意味し、 "遅延名解決"が後の使用に適用されます。 – gbn