Dla wszystkich osób, które zalecają stosowanie zmiennych tabeli, należy zachować ostrożność. Zmienna tabeli nie może być indeksowana, podczas gdy tabela tymczasowa może być. Zmienna tabelowa jest najlepsza w przypadku pracy z niewielkimi ilościami danych, ale jeśli pracujesz na większych zestawach danych (na przykład zapisach 50 kB), tabela tymczasowa będzie znacznie szybsza niż zmienna tabeli.
Należy również pamiętać, że nie można polegać na próbie/haczyku w celu wymuszenia czyszczenia w ramach procedury składowanej. niektóre typy niepowodzeń nie mogą zostać przechwycone podczas próby/przechwytywania (np. kompilacja błędów z powodu opóźnionego rozpoznawania nazw), jeśli chcesz być naprawdę pewny, że możesz potrzebować utworzyć przechwyconą procedurę przechowywaną, która może wykonać próbę/przechwycić procedurę składowaną procesu roboczego i czyść tam porządek.
np. stworzyć pracownikowi proc AS BEGIN - zrobić coś tutaj END
create proc wrapper AS
BEGIN
Create table #...
BEGIN TRY
exec worker
exec worker2 -- using same temp table
-- etc
END TRY
END CATCH
-- handle transaction cleanup here
drop table #...
END CATCH
END
Dobrze, że jest również to, co myślałem .. Mam nerwowy ponieważ używałem Query Analyzer i zbudować temp tabeli i był w stanie nazwać znowu później, kiedy go nie upuściłem. Ale w świetle twojego postu próbowałem otworzyć nowe zapytanie i próbowałem wywoływać je stamtąd bez powodzenia, a teraz jestem znowu spokojny :) –
Ale pod względem wydajności są poważne problemy z współbieżnością. – tpower
@tpower: Moje rozumienie OP dotyczyło głównie modyfikowania stanu współdzielonego i wątków. Jest oczywiste, że wpłynie to na wydajność. –