MSSQL - Nur INSERT wenn kein Treffer bei SELECT

hondocrx

Erfahrenes Mitglied
Hallo!

Ich würde gern folgende Abfrage realisieren (So stell ich mir nur den Ablauf der Abfrage vor)
Code:
SELECT nummer FROM db.test WHERE (name = "testname) AND (nachname = "testnachname)

if COUNT(nummer)=0 THEN INSERT INTO db.test (name,nachname,adresse) VALUES ("testname","testnachmane","TEstadresse")

Kurz zusammengefasst: Ist der Name nicht vorhanden soll er angelegt werden, So will ich Dubletten vermeiden.

Es interessiert mich aber auch grundlegend ob man mit einer If THEN - Anweisung in einr SQL-Abfrage arbeiten kann.


MfG und schon mal Danke im Vorraus

hondocrx
 
Hallo,

ich weiß nur, dass es zum Beispiel in MySQL ein Sprachkostrukt namens ON DUPLICATE KEY UPDATE gibt. Das dient dazu, dass im Falle, dass ein Datensatz mit diesem Schlüssel (oder Index => UNIQUE) schon existiert, der vorhandene nur aktualisiert wird. Du könntest dann die UPDATE-Klausel so schreiben, dass sie beispielsweise eine nicht existierende Spalte gleich eins setzt, also eigentlich kein UPDATE durchführt.
 
Ein Gruß nach Dresden,

leider hilft es mir nicht so ganz. Der Schlüssel wird ja erst beim Schreiben generiert.

Eventuell geht es ja auf folgendem Weg.

Meine Theorie:

Als erstes werden ALLE Datensätze Importiert. (ab ID=10000)
Auch alle doppelten Datensätze.

Dann soll folgende Abfrarge alle Dubletten finden und gleich löschen. Ist Leider momentan alles nur auf dem Papier da ich gerade nicht direkt an die DB kann


Code:
delete from db.test where( (name = "testname" AND nachname = "testnachname" AND datum = "testdatum") AND (Select COUNT (*)
FROM db.test WHERE name = "testname" AND nachname = "testnachname" AND datum = "testdatum" > 1) AND (ID > 9999))

Könnt das so (SYNTAX) funktionieren?



MfG
 
Zuletzt bearbeitet:
Wenn du den SQL Server 2008 verwendest dann solltest du dir mal den Merge Befehl reinziehen

oder du schaust dir mal den Befehl Intersect bzw Except an
Grüsse Alex
 
Oder du legst einen neuen unique key (name,vorname) an. Das INSERT würde dann einen Fehler melden, denn du abfragen/abfangen kannst.
 
Hallo!

Danke für die Tipps.

Hab nun alle Eintrage eingelesen und DANACH die Dubletten gelöscht. War einfacher zu realisieren da mir die Zeit weggelaufen war.

mfG hondocrx
 

Neue Beiträge

Zurück