SQL Serverでは、@テーブル、#テーブル、##テーブルの違いは何ですか?
SQL Serverでは、@テーブル、#テーブル、##テーブルの違いは何ですか?
回答:
#table ローカル(作成したユーザーにのみ表示される)一時テーブルを参照します。
##table グローバル(すべてのユーザーに表示)一時テーブルを参照します。
@variableName 型に応じて値を保持できる変数を指します。
#そして##テーブルは一時データベースに代表される実際のテーブルです。これらのテーブルにはインデックスと統計を含めることができ、セッション内のsproc全体にアクセスできます(グローバル一時テーブルの場合、セッション間で利用できます)。
@tableはテーブル変数です。
#tableと@tableの違いに焦点を当てます。## tableはグローバルな一時テーブルであり、SQL Serverを使用して10年以上の記録として、有効なユースケースにまだ出会っていません。確かにいくつかは存在すると思いますが、オブジェクトの性質上、IMHOは非常に使い物になりません。
@marc_sによる@whinerへの応答は完全に真です。テーブル変数が常にメモリ内に存在するというのは一般的な神話です。テーブル変数がディスクに移動し、一時テーブルのように動作することは実際には非常に一般的です。
とにかく、@ Astanderによって指摘されたリンクをたどることによって、一連の相違点について読むことをお勧めします。ほとんどの違いには、@ table変数では実行できない制限があります。