Ich habe das folgende Problem in SQL Server, ich habe Code, der wie folgt aussieht:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN FROM TBL_PEOPLE
Wenn ich dies tue, erhalte ich die Fehlermeldung 'Es gibt bereits ein Objekt mit dem Namen' #TMPGUARDIAN 'in der Datenbank'. Kann mir jemand sagen, warum ich diesen Fehler bekomme?
Sie legen es ab, erstellen es und versuchen dann, es mit SELECT INTO
erneut zu erstellen. Ändern:
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
INSERT INTO #TMPGUARDIAN
SELECT LAST_NAME,FRST_NAME
FROM TBL_PEOPLE
In MS SQL Server können Sie eine Tabelle ohne eine CREATE TABLE
-Anweisung erstellen, indem Sie SELECT INTO
verwenden.
Normalerweise setze ich diese Zeilen am Anfang meiner gespeicherten Prozedur und dann am Ende.
Es ist eine Prüfung auf Vorhandensein von #temp-Tabellen.
IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
begin
drop table #MyCoolTempTable
end
Sie müssen die Abfrage so ändern
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME)
SELECT LAST_NAME,FRST_NAME FROM TBL_PEOPLE
- Machen Sie eine letzte Sitzung zum Löschen aller temporären Tabellen. Immer am Ende fallen. In Ihrem Fall kann manchmal ein Fehler auftreten, wenn die Tabelle nicht vorhanden ist, während Sie versuchen, zu löschen.
DROP TABLE #TMPGUARDIAN
Vermeiden Sie die Verwendung von Einfügungen in Weil Wenn Sie Einfügen in verwenden, wenn Sie die temporäre Tabelle ändern möchten, indem Sie eine neue Spalte hinzufügen, die nach einem bestimmten Prozess gefüllt werden kann (nicht zusammen mit der Einfügung). Zu diesem Zeitpunkt müssen Sie es auf die gleiche Weise überarbeiten und entwerfen.
Tabellenvariable verwenden http://odetocode.com/articles/365.aspx
declare @userData TABLE(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30)
)
Advantages Keine Drop-Anweisungen erforderlich, da dies Variablen ähnelt. Der Umfang endet unmittelbar nach der Ausführung.
Manchmal können Sie dumme Fehler machen, z. B. das Schreiben einer Einfüge-Abfrage in derselben .sql-Datei (im selben Arbeitsbereich/auf derselben Registerkarte). Wenn Sie also die Einfüge-Abfrage ausführen, in der Ihre Erstellungsabfrage oben geschrieben wurde und bereits ausgeführt wurde, wird sie erneut ausgeführt mit der Einfügeabfrage.
Dies ist der Grund, warum der Objektname (Tabellenname) bereits existiert, da er zum zweiten Mal ausgeführt wird.
Wechseln Sie also zu einer separaten Registerkarte, um die Einfügung oder Ablage oder alle anderen Abfragen zu schreiben, die Sie ausführen möchten.
Oder verwenden Sie Kommentarzeilen vor allen Abfragen im gleichen Arbeitsbereich wie
CREATE -- …
-- Insert query
INSERT INTO -- …
In Azure Data Warehouse tritt dies auch gelegentlich auf, da für eine Benutzersitzung temporäre Tabellen erstellt wurden. Das gleiche Problem wurde durch erneutes Verbinden der Datenbank behoben.