Für alle, die Tabellenvariablen verwenden, sollten Sie vorsichtig sein. Tabellenvariable kann nicht indexiert werden, während eine temporäre Tabelle sein kann. Eine Tabellenvariable ist am besten, wenn Sie mit kleinen Datenmengen arbeiten, aber wenn Sie an größeren Datensätzen arbeiten (z. B. 50.000 Datensätze), ist eine temporäre Tabelle viel schneller als eine Tabellenvariable.
Denken Sie auch daran, dass Sie sich nicht auf einen try/catch verlassen können, um eine Bereinigung innerhalb der gespeicherten Prozedur zu erzwingen. bestimmte Arten von Fehlern können nicht innerhalb eines try/catch abgefangen werden (z. B. Kompilierungsfehler aufgrund verzögerter Namensauflösung), wenn Sie wirklich sicher sein möchten, dass Sie möglicherweise eine Wrapper-gespeicherte Prozedur erstellen müssen, die ein try/catch der gespeicherten Prozedur des Arbeiters ausführen kann und mach die Aufräumarbeiten dort.
z.B. create proc Arbeiter AS BEGIN - etwas tun, hier 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
Okay, das ist auch das, was ich dachte .. ich nervös, weil ich Query Analyzer wurde mit und bauen eine temporäre Tabelle und konnte es nennen später wieder, als ich es nicht fallen gelassen habe. Aber im Lichte Ihrer Post habe ich versucht, eine neue Abfrage zu öffnen und versuchte es von dort ohne Erfolg und jetzt bin ich wieder ruhig :) –
Aber Leistung weise gibt es große Nebenläufigkeit Probleme. – tpower
@tpower: Mein Verständnis von OP war hauptsächlich über das Ändern von gemeinsamen Status und Threading-Problemen. Es ist offensichtlich, dass die Leistung beeinträchtigt wird. –