この答えは私を少し混乱させました。「一時テーブルへの選択」とは何ですか?誰かがその簡単な例を見せてくれますか?
5 に答える
一時テーブルは、ストアド プロシージャの実行中だけ存在するテーブルであり、通常、最終的な計算の途中で一時的な結果を保持するために使用されます。
SQL Server では、すべての一時テーブルに # のプレフィックスが付いているため、次のようなステートメントを発行すると
Create table #tmp(id int, columnA)
次に、SQL Server はテーブルが一時的なものであることを自動的に認識し、ストアド プロシージャが範囲外になるとテーブルが明示的に削除されない限り破棄されます。
drop table #tmp
必要なデータのサブセットを一時テーブルに一時コピーとして挿入し、運用システムを停止する心配なしにデータを操作できるため、トランザクション量の多い巨大なテーブルに対して実行されるストアド プロシージャでこれらをよく使用します。私がデータで行っていることがかなり激しい操作である場合。
SQL Server では、すべての一時テーブルが tempdb データベースに存在します。
詳細については、この記事を参照してください。
何度も使用したい複雑な結果セットがある場合、メイン テーブル (データが変更され、パフォーマンスに影響を与える可能性がある場所) に対してクエリを実行し続けますか、それともさらに処理するためにそれらを一時テーブルに格納しますか? . 一時テーブルを頻繁に使用することをお勧めします。
または、一時テーブル(またはCURSOR)を使用できる設定されていない方法で行を反復処理する必要があります
DBに対して単純なCRUDを行う場合、おそらく一時テーブルは必要ありません
あなたが持っている:
- テーブル変数:
DECLARE @foo TABLE (bar int...)
- 明示的な一時テーブル:
CREATE TABLE #foo (bar int...)
- インライン作成:
SELECT ... INTO #foo FROM...
一時テーブルは、タイプ「テーブル」の sql 変数と考えてください。それらをスクリプトおよびストアド プロシージャで使用します。単純な値ではなく、データベース テーブルのサブセット (垂直方向と水平方向の両方) であるデータを操作する必要がある場合に便利です。
これらの利点を理解すると、プライベート、グローバル、トランザクションなど、一時テーブルのさまざまな共有モデル (スコープ) に付属するより多くの機能を活用できます。すべての主要な RDBMS エンジンは一時テーブルをサポートしていますが、標準の機能や構文はありません。彼ら。
使用例については、answerを参照してください。
一時テーブルは、次のような構文を使用して動的に作成されるテーブルです。
SELECT [columns] INTO #MyTable FROM SomeExistingTable
すると、選択した値が入力されたテーブルが作成されます。これで、それに対して選択したり、更新したりできます。
SELECT FirstName FROM #MyTable WHERE...
テーブルは、ストアド プロシージャが存在している間など、あらかじめ決められた期間存続します。その後、それは記憶から消え、二度とアクセスできなくなります。一時的。
HTH
SELECT ... INTO
一時テーブルを作成し、次のように入力するために使用できます。
SELECT Col1, Col2...
INTO #Table
FROM ...
WHERE ...
(ところで、この構文は SQL Server と Sybase 用です。)
編集上記のようにテーブルを作成したら、同じ接続で他のクエリを使用できます。
Select
From OtherTable
Join #Table
On #Table.Col = OtherTable.Col
ここで重要なのは、すべてが同じ接続で発生することです。したがって、クライアント スクリプトから一時テーブルを作成して使用することは、その後のすべてのテーブルの使用が同じ接続上にあることを確認する必要があるという点で厄介です。代わりに、ほとんどの人はストアド プロシージャで一時テーブルを使用し、1 行でテーブルを作成し、その後同じプロシージャで数行を使用します。