架构师_程序员_码农网

ユーザー名 パスワード取得
会員登録

QQ登录

ワンステップ

検索
表示:6432|返信: 0
打印 上一主题 下一主题

[情報]一時テーブルのSql Serverのデータベースの説明

[コピーリンク]
SQLサーバーデータベースの一時テーブル
への直接リフト跳转到指定楼层
オーナー
Sqlserverデータベースにおいて、テンポラリテーブルは非常に重要です。 以下は、SQLデータベースにおけるテンポラリテーブルの特徴とその使用方法について、参考程度に詳しく説明したものです。

一時テーブルは永続テーブルに似ていますが、一時テーブルはtempdbに格納され、使用されなくなると自動的に削除されます。一時テーブルにはローカルとグローバルの2種類があります。これらは名前、可視性、可用性が異なります。

一時テーブルには、以下のような特徴があります:

  • ローカル・テンポラリ・テーブルは、ユーザがテーブル作成時に "#"接頭辞を付加したテーブルです。
  • 異なるデータベース接続で作成されたローカルテンポラリテーブルは、同じ "名前 "を持ちますが、互いには何の関係もありません。SQLSERVERでは、ローカルテンポラリテーブルは特別な命名メカニズムにより、データベース接続から独立していることが保証されています。SQLSERVER では、特別な命名メカニズムにより、ローカル一時テーブルのデータベース接続からの独立性が保証されています。
  • 真の一時テーブルは、データベースシステムが自動的に保持するデータベースの一時テーブルスペースを使用するため、テーブルスペースを節約することができます。また、一時テーブル空間は一般的に仮想メモリを利用するため、ハードディスクへのI/O回数が大幅に削減され、システム効率が向上します。
  • 一時テーブルは、トランザクションの終了時やセッションの終了時に自動的に空になるので、使用後のデータの削除を忘れないようにする必要がありません。


ローカル・テンポラリ・テーブル

ローカル・テンポラリ・テーブルは1桁の記号(#)で始まる名前を持ち、現在のユーザー接続(つまり、ローカル・テンポラリ・テーブルを作成した接続)にのみ表示され、ユーザーがSQL Serverインスタンスから切断すると削除されます。

例えば、以下のステートメントでデータベース接続にローカル一時テーブル#Tempを作成します。

データベース接続 1:



その後、同時にデータベース接続2を起動し、#Tempに対するクエリを実行します。

データベース接続2:



データベース接続2の結果を見てみましょう。

データベース接続2:



この結果は、データベース接続2に対してテーブル#Tempが見つからないことを示しています。 これは、テンポラリテーブルである#Tempは、それを作成したデータベース接続1にのみ表示され、データベース接続2には表示されないことを意味します。

グローバル一時テーブル

名前が 2 桁の記号(##)で始まるグローバル一時テーブルは、作成後はどのデータベース接続からも見ることができ、そのテーブルを参照しているすべてのデータベース接続が SQL Server から切断されると削除されます。

例えば、以下のステートメントでグローバル一時テーブル##Tempをデータベース接続に作成し、3行のデータを挿入します。

データベース接続 1:



次に、データベース接続2内の##Tempに以下のデータを問い合わせます。

データベース接続2:



データベース接続2の結果は以下のようになります。

データベース接続2:



ご覧のように、データベース接続 2 は、データベース接続 1 が作成したグローバル一時テーブル ##Temp に正常にアクセスすることができます。結果は次のようになります:

データベース接続1を閉じてから、データベース接続2を再度実行します:



データベース接続 1 を閉じた後、データベース接続 2 はグローバル一時テーブル ##Temp を見つけられないことがわかります。これは、データベース接続 1 を閉じた後、データベース接続 2 に一時テーブル ##Temp を使用するステートメントがないため、Sqlserver はグローバル一時テーブル ##Temp を参照するデータベース接続がなくなったと判断し、##Temp を解放したためです。


次に、データベース接続 2 のグローバル一時テーブル ##Temp のトランザクションで排他ロック(X ロック)を保持し、データベース接続 1 を閉じます。

データベース接続1:



データベース接続2:



データベース接続 1 を閉じ、データベース接続 2 を実行します:



この結果は、データベース接続 1 を閉じたにもかかわらず、データベース接続 2 がトランザクション中にグローバル一時テーブル ##Temp の排他ロック (X ロック) を保持していたため、データベース接続 1 を閉じても一時テーブル ##Temp が解放されず、データベース接続 2 で開始されたトランザクションがロールバックまたはコミットされない限り、データベース接続 2 は一時テーブル ##Temp の排他ロック (X ロック) を保持し続けることを示しています。Tempの場合、Sqlserverはグローバル一時テーブル##Tempを参照しているデータベース接続がまだ存在すると判断するため、##Tempは解放されません。




前の記事TypeScriptプロパティアクセサ(set、get)
次の記事:SQLサーバーは、現在のシステム時刻の前の日を照会する
SQL Server のデッドロック問題を追跡するための拡張イベントの使用 SQL Server のデッドロック問題を追跡するための拡張イベントの使用 SQL Server のデッドロック問題を追跡するための拡張イベントの使用 SQL Server のデッドロック問題を追跡するための拡張イベントの使用 SQL Server のデッドロック問題を追跡するための拡張イベントの使用 SQL Server のデッドロック問題を追跡するための拡張イベントの使用
投稿するにはログインが必要です ログイン会員登録

このバージョンのインテグラルルール


免責事項:コード・ファーマー・ネットワークが公開するすべてのソフトウェア、プログラミング資料、記事は、学習と研究目的に限定されます。上記のコンテンツは、商業的または違法な目的で使用してはならず、さもなければ、すべての結果は利用者が負担してください。本サイトはネットワークからの情報であり、著作権紛争は本サイトとは関係ありません。あなたは、ダウンロードから24時間以内に完全にコンピュータから上記のコンテンツを削除する必要があります。もしあなたがこのプログラムを気に入ったなら、正規のソフトウェアをサポートし、登録を購入し、より良い正規のサービスを受けてください。もし著作権侵害があれば、メールでご連絡ください。

メール To:help@itsvse.com

QQ|( 鲁ICP备14021824 号-2)|サイトマップ

GMT+8, 2024-9-18 22:17

クイック返信トップに戻る一覧に戻る