また、あなたは使用することができますTOP(0)
:
SELECT TOP(0) *
INTO #TempTable
FROM SourceTable
ただし、これら3つのケース(、、)のすべてSELECT TOP(0)
でWHERE NULL=NULL
、WHERE 1=0
実行プランは同じになります。

これらすべての場合において、SQL Serverは、クエリ最適化フェーズから、これらのクエリが実行時に行を生成しないことを認識します。したがって、ソーステーブル(Sales.SalesOrderHeader
この場合)からデータを読み取る代わりに、サーバーはConstant Scan
演算子を使用します:
1)
[...]クエリオプティマイザーは、データのページに触れる前であっても、述語を満たすことができるレコードがないことを認識している可能性があります
(ソース)
2)
矛盾の検出は、クエリが行をまったく返さないように記述されていることを認識する最適化です。
(ソース)
結論:これらのソリューションのいずれかを使用できます。
注:使用できるのは。WHERE NULL=NULL
の場合のみですSET ANSI_NULLS ON
。ANSI_NULLS
設定がの場合OFF
、WHERE NULL=NULL
フィルターは常にtrue
であり、実行プランは次のようになります。
