SQL Server: Doppelte Einträge mit bedingten Einfügungen verhindern
Bei der Arbeit mit SQL Server-Datenbanken ist es für die Aufrechterhaltung der Datenintegrität von entscheidender Bedeutung, das doppelte Einfügen von Daten zu verhindern. Ein gängiger Ansatz besteht darin, bedingte Einfügungen zu verwenden, wobei häufig Syntaxprobleme auftreten. Der Fehler „Msg 156, Level 15, Incorrect syntax near the keyword ‚WHERE‘“ entsteht häufig durch eine falsche Implementierung der „Einfügen, wenn nicht vorhanden“-Logik.
Die Lösung liegt in der Umstrukturierung der Einfügeanweisung. Verwenden Sie anstelle des direkten Versuchs „Einfügen, falls nicht vorhanden“ einen bedingten Block:
<code class="language-sql">BEGIN IF NOT EXISTS (SELECT 1 FROM EmailsRecebidos WHERE De = @_DE AND Assunto = @_ASSUNTO AND Data = @_DATA) BEGIN INSERT INTO EmailsRecebidos (De, Assunto, Data) VALUES (@_DE, @_ASSUNTO, @_DATA) END END</code>
Dieser überarbeitete Code verwendet IF NOT EXISTS
, um vor dem Versuch einer Einfügung zu prüfen, ob ein Datensatz vorhanden ist, der den angegebenen Kriterien (De, Assunto, Data) entspricht. Dies verhindert doppelte Einträge. Beachten Sie die Verwendung von SELECT 1
aus Gründen der Effizienz. Es muss nur eine passende Zeile gefunden werden, nicht alle Spalten werden abgerufen.
Während diese Methode die meisten Szenarien effektiv bewältigt, ist es wichtig, das Potenzial für Rennbedingungen in Umgebungen mit hoher Parallelität zu berücksichtigen. Um absolute Datenintegrität sicherzustellen, sollten Sie robustere Techniken wie gespeicherte Prozeduren, Trigger oder geeignete Sperrmechanismen in Betracht ziehen, um den gleichzeitigen Zugriff zu verwalten und Dateninkonsistenzen zu verhindern.
Das obige ist der detaillierte Inhalt vonWie vermeide ich „Falsche Syntax in der Nähe des Schlüsselworts „WHERE'' beim Einfügen eindeutiger Daten in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!