選択クエリから一時テーブルを作成したい (テーブルには多くの列があるため、一時テーブルを手動で作成したくない) 次のクエリを使用します。
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
このクエリが空の行を返す場合、作成されません#TempTable
。したがって、これ#TempTable
を次のクエリに使用することはできません。
これを解決する方法はありますか?
選択クエリから一時テーブルを作成したい (テーブルには多くの列があるため、一時テーブルを手動で作成したくない) 次のクエリを使用します。
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
このクエリが空の行を返す場合、作成されません#TempTable
。したがって、これ#TempTable
を次のクエリに使用することはできません。
これを解決する方法はありますか?
SELECT * FROM MyTable WHERE ...
投稿したコード内のクエリが次の場合:
SELECT *
INTO TempTable
FROM MyTable WHERE ...
行が返されない場合、空のが作成されますが、句TempTable
に一致する行がない場合、データは入力されません。ただし、少なくとも同じ構造WHERE
のテーブルを作成する必要があり、空になります。TempTable
MyTable
たとえば、次のようになります。
SELECT * INTO TempTable FROM MyTable WHERE 1 <> 1;
述語が常に false であるため、常にTempTable
同じ構造の空のテーブルを作成します。MyTable
1 <> 1
ただし、次のように宣言できます。
DECLARE @Temp TABLE(Field1 int, ...);
これは、一時テーブルを動的に作成および設定していて、明示的に作成していないためです。このようなシナリオでは、一時テーブルを作成する前に、最初にその存在を確認する必要があります。
これを試して:
IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable
END
SELECT * INTO #TempTable FROM MyTable
Select * From #TempTable
あなたの質問
SELECT * INTO #TempTable
FROM MyTable
WHERE ...
選択が行を返さない場合、空のテーブルを作成します