あるデータベースから別のデータベースにデータをインポートして変換するためのストアド プロシージャを作成しました。各インポートは単一の会社 ID を取り、この会社に関連するすべてのデータをインポートします。
変換ステップを支援するために、一時テーブルを使用します。スクリプト レビューの一環として、一時テーブルではなくテーブル変数を使用するように言われました。レビュアーは、2 つの異なるインポートを同時に実行すると、一時テーブルが共有され、インポートが破損すると主張しています。
質問:
- 2 つの異なるインポートを同時に実行すると、一時テーブルが共有されるというのは本当ですか?
- 各呼び出し
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