Ich verwende den folgenden Code, um zu überprüfen, ob die temporäre Tabelle vorhanden ist und die Tabelle zu löschen, falls sie bereits existiert, bevor sie erneut erstellt wird. Es funktioniert einwandfrei, solange ich die Spalten nicht ändere. Wenn ich später eine Spalte hinzufüge, wird ein Fehler mit der Meldung "ungültige Spalte" angezeigt. Bitte lassen Sie mich wissen, was ich falsch mache.
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
)
select company, stepid, fieldid from #Results
-- Bis hierhin funktioniert es einwandfrei
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
CREATE TABLE #Results
(
Company CHAR(3),
StepId TINYINT,
FieldId TINYINT,
NewColumn NVARCHAR(50)
)
select company, stepid, fieldid, NewColumn from #Results
-- Funktioniert nicht
0 Stimmen
Wo fügst du die Spalte hinzu? Kannst du den genauen Code posten, der dir einen Fehler gibt?
0 Stimmen
Ich füge die Spalte zur Tabelle #Results hinzu. Wenn Sie den obigen Code kopieren und zum ersten Mal ausführen, erhalten Sie keine Fehler. Wenn Sie jetzt eine Spalte zur Temp-Tabelle hinzufügen und die Spalte im Select-Statement hinzufügen, wird angezeigt, dass die Spalte nicht gefunden wurde (oder so ähnlich).
27 Stimmen
Betrachten Sie die Verwendung des folgenden Musters:
BEGIN TRANSACTION; CREATE TABLE #Results; ...; DROP TABLE #Results; COMMIT
. Wenn die Transaktion erfolgreich ist, wird die Tabelle entfernt. Wenn sie fehlschlägt, ist die Tabelle ebenfalls verschwunden (da sie innerhalb der Transaktion erstellt wurde). In jedem Fall: Keine Notwendigkeit zu prüfen, ob die Tabelle bereits existiert.4 Stimmen
Sieht so aus, als bräuchten Sie gerade GO-Anweisungen.
1 Stimmen
Für die neuesten SQL-Versionen können Sie einfach
DROP TABLE IF EXISTS #Results;
ausführen.