我编写了一个存储过程,用于将数据从一个数据库导入并转换到另一个数据库。每个导入将使用单个公司ID,并导入与该公司相关的所有数据。
为了帮助转换步骤,我使用临时表。在脚本审查的过程中,我被告知应该使用表变量而不是临时表。 审阅人员声称,如果我们同时运行两个不同的导入,那么临时表将被共享并破坏导入。
问题:
- 如果我们同时运行两个不同的导入,临时表会被共享吗?
- 每次调用
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