SQL Server の一時テーブルのスコープ
SQL Server を使用する場合、データの破損を防ぐために一時テーブルのスコープを理解することが重要です。 。この記事では、マルチユーザー環境における一時テーブルの共有に関する誤解を調査し、新しいスコープの作成における EXEC の役割を明確にします。
一時テーブルのスコープ
主張に反する一時テーブルが共有されているため、SQL Server は同時インポート操作を確実に分離します。 Microsoft のドキュメントに記載されているとおり:
の範囲EXEC
EXEC を呼び出すたびに、新しいスコープが作成されます。これは、ストアド プロシージャ内で作成された一時テーブルは、同時に実行されている他のストアド プロシージャには表示されないことを意味します。
次の例を考えてみましょう。
CREATE PROC [dbo].[ImportCompany] ( @CompanyId AS INTEGER ) AS EXEC [dbo].[ImportAddress] @CompanyId = @CompanyId --Import other data CREATE PROC [dbo].[ImportAddress] ( @CompanyId AS INTEGER ) AS CREATE TABLE #Companies (OldAddress NVARCHAR(128), NewAddress NVARCHAR(128)) INSERT INTO #Companies(OldAddress, NewAddress) SELECT Address as OldAddress, 'Transformed ' + Address as NewAddress FROM [OldDb].[dbo].[Addresses] WHERE CompanyId = @CompanyId --Do stuff with the transformed data DROP TABLE #Companies EXEC [dbo].[ImportCompany] @CompanyId = 12345
この場合、#Companies テーブルは次のようになります。 ImportAddress プロシージャの最後に自動的に削除され、同時インポート操作がアクセスしたり破損したりすることがなくなります。
結論
SQL Server の一時テーブルのスコープは現在のセッションに限定されており、同時インポート間で共有することはできません。 EXEC を呼び出すたびに新しいスコープが作成され、分離が確保され、データの破損が防止されます。したがって、このシナリオではデータの整合性を維持するためにテーブル変数を使用する必要はありません。
以上がSQL Server はどのようにして同時プロセス内の一時テーブルを確実に分離しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。