Napisałem procedurę przechowywaną, aby zaimportować i przekształcić dane z jednej bazy danych na inną. Każdy import miałby mieć pojedynczy identyfikator firmy i importować wszystkie dane związane z tą firmą.Zakres tabel tymczasowych w SQL Server
Aby pomóc przy transformacji, korzystam z tabel tymczasowych. W ramach przeglądu skryptu powiedziano mi, aby używać zmiennych tabelowych zamiast tabel tymczasowych. Recenzent twierdzi, że jeśli uruchomimy dwa różne importy w tym samym czasie, tabela tymczasowa zostanie udostępniona i uszkodzi import.
Pytania:
- Czy to prawda, że tabela tymczasowa byłyby dzielone jeśli prowadzimy dwa różne importu w tym samym czasie?
- Czy każde połączenie z numerem
EXEC
tworzy nowy zakres?
Oto zmyślony przykład skryptu.
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
zdanie może być wykonane jednocześnie przez kilku użytkowników, Aparat baz danych musi móc odróżnić tabele utworzone przez różnych użytkowników_ jest mylące! Wygląda na to, że * ten sam użytkownik * w różnych sesjach udostępnia tabelę tymczasową. I nie jest tak. – Alex
@Alex - Zgadzam się, że może to być nieco mylące, ale niestety tak właśnie Microsoft zdecydował się sformułować. –