永続的なテーブルを操作または操作するのではなく、SQL Server一時テーブルにデータを格納す テーブルへの完全なDDLまたはDMLアクセスが必要ですが、それを持っていないとしましょう。 既存の読み取りアクセス権を使用して、データをSQL Serverの一時テーブルにプルし、そこから調整を行うことができます。 または、既存のデータベースにテーブルを作成する権限がない場合は、操作できるSQL Server一時テーブルを作成できます。, 最後に、現在のセッションでのみデータを表示する必要がある状況にある可能性があります。
SQL Serverは、いくつかの種類のSQL Server一時テーブルをサポートしており、非常に役立ちます。
続行する前に、コードサンプルを実行する場合は、SQL Server Management Studioを開くことをお勧めします。
ローカルSQL一時テーブル
ローカルSQL Server一時テーブルは、ポンド記号または”ハッシュタグ”の後にテーブル名を使用して作成されます。 たとえば、#Table_name。 Sql一時テーブルはtempdbデータベースに作成されます。, ローカルSQL Server一時テーブルは、現在のセッションにのみ表示されます。 宣言されているセッション以外のプロセスまたはクエリでは、表示または使用できません。
結果セットを取得してSQL Server一時テーブルに入れる簡単な例を次に示します。
SQL Server一時テーブルで最もよく使用されるシナリオの一つは、何らかのループ内にあります。 たとえば、SQLステートメントのデータを処理したい場合、ループを読み取るための項目を格納する場所が必要です。 それはそうする速く、有効な手段を提供する。, ループはSQL Server一時テーブルを参照し、目標の基準を満たすレコードを処理できるようになりました。
SQL Server一時テーブルを使用するもう一つの理由は、sqlステートメントで行う必要のある処理がいくつかあることです。 たとえば、結合を作成し、その結果セットからレコードをプルする必要があるたびに、この結合をもう一度処理する必要があるとしましょう。 この結果セットを一度処理して、レコードをSQL一時テーブルにスローしないのはなぜですか? 次に、残りのsql文にSQL一時テーブル名を参照させることができます。, これは高価なクエリ処理を節約するだけでなく、コードが少しきれいに見えるようにすることさえあります。
しかし、私が作りたい一つのポイントがあります。 作業しているセッションに後続のネストされたセッションがある場合、SQL Serverの一時テーブルは階層の下位のセッションでは表示されますが、階層の上 これを視覚化させてください。
このクイックダイアグラムでは、セッション2でSQL一時テーブルが作成されます。 その下のセッション(セッション3およびセッション4)は、SQL Server一時テーブルを表示できます。, ただし、セッション1はセッション2より上にあり、SQL Server一時テーブルを表示できません。
セッションが切断されると、SQL一時テーブルが削除または破棄されます。 多くの場合、開発者はステートメントの最後に”DROP#Table_Name”コマンドを使用してクリーンアップすることがあります。 しかし、それは完全にあなたとあなたが達成しようとしていること次第です。, また、名前の競合が発生した場合(sql Serverの一時テーブルがtempdbに作成されることに注意してください)、SQL serverはテーブル名の末尾にサフィックスを追加して、tempdbデータベース内で一意になることに注意してください。 しかし、このプロセスは開発者/ユーザーにとって透過的です。 そのセッションに限定されているときに宣言したのと同じ名前を使用することができます。
グローバルSQL一時テーブル
グローバルSQL一時テーブルは、結果セットを他のすべてのセッションに表示する場合に便利です。 権限を設定する必要はありません。, テーブルからの値の挿入、変更、またはレコードの取得は誰でも可能です。 また、誰でもテーブルをドロップできます。 ローカルのSQL Server一時テーブルと同様に、セッションが切断され、テーブルへの参照がなくなると、それらは削除されます。 いつでも”DROP”コマンドを使用して手動でクリーンアップできます。 これは私がお勧めするものです。
グローバルSQL一時テーブルを作成するには、テーブル名の前に二つのポンド記号を使用します。 例:##Global_Table_Name。,
テーブル変数
テーブル変数は、DECLAREステートメントを使用して、他の変数と同様に作成されます。 多くるとテーブルの変数だけ存在するメモリが、それは単純に当てはまらない。 これらは、ローカルのSQL Server一時テーブルとよく似ています。 また、地元のSQL温度テーブル、テーブル変数にアクセスのみのセッションを作成した。 ただし、SQL一時テーブルとは異なり、table変数は現在のバッチ内でのみアクセスできます。 これらはバッチの外部では表示されないため、セッション階層の概念は多少無視することができます。,
パフォーマンスに関する限り、テーブル変数は少量のデータ(少数の行のみなど)で便利です。 それ以外の場合は、大量のデータをふるい分けるときにSQL Server一時テーブルが役立ちます。 したがって、ほとんどのスクリプトでは、テーブル変数ではなくSQL Server一時テーブルを使用する可能性が最も高いでしょう。 一方が他方よりも有用であるとは言わないために、それはあなたが仕事のための適切なツールを選択しなければならないだけです。
テーブル変数を設定して使用する簡単な例を次に示します。,
販売された特定の製品の合計数量に関する情報を保持するテーブル変数を作成しました。 これは非常に単純化された例であり、多くの行が含まれている場合は使用しません。 しかし、いくつかの製品しか見ていなければ、これは本当にうまくいきます。 テーブル変数が設定されると、これをテーブルとして別のテーブルに結合し、必要な情報を収集できます。 だから、多くの柔軟性があり、開発者は非常に創造的であることができます。
また、最後に、テーブル変数のトランザクションに関して。, 開発者がテーブル変数への変更を含むトランザクションをロールバックした場合、この特定のトランザクション内のテーブル変数への変更はそのまま残 つまり、問題のこのトランザクションの他の部分はロールバックされますが、スクリプトのその部分がエラーでない限り、table変数を参照するものはロールバ,
- 著者
- 最近の投稿
彼はヘルプデスクの世界で彼のITのキャリアを開始し、最終的に物事のネットワーク/システム管理者側に移動しました。 しばらくして、彼はデータベース(主にSQL Server)で作業するための愛情を開発し、過去八年間のためにそれに彼のキャリアを集中しています。, 彼は異なった必要性の大きく、小さい環境のさまざまな企業のためにすべて働いた。
SQL Shackは、長年にわたって彼に多くのことを与えてきたコミュニティに貢献する機会を彼に提供してきました。,
すべての投稿によるAamir Syed
- はSQLサーバーは常に暗号化された、機密データの暗号化、お客様の環境月27日 2018
- 使用例の検索店にSQLサーバ月18日2018
- を使用するときのSQL温度テーブル前テーブル変数-月21日2017