INSERT nur,wenn Eintrag noch nicht vorhanden
-
Hi,
ich möchte in einer einzelnen MSSQL Anweisung einen Eintrag in eine Tabelle einfügen, allerdings nur, wenn dieser Eintrag noch nicht in der Tabelle vorhanden ist.
Ich hab gelesen, dass es mit IF gehen sollte, aber ich hab leider nix darüber gefunden, wie man in der Bedingung die Existenz eines bestimmten Wertes in dieser Tabelle überprüfen kann.
-
INSERT IGNORE
-
REPLACE
-
IF NOT EXISTS(SELECT * ...) THEN INSERT INTO ....
-
IGNORE und REPLACE sollten es nicht sein, aber EXISTS tuts. Danke.
-
Es geht um MSSQL und nicht um MySQL.
REPLACE gibt es bei MSSQL nicht und ist auch nicht Standard.
-
schick sie doch alle rein und mach dann in bestimmten abständen ein group? so hatte ich das mal weiß nicht ob das besser/schlechter war
-
rage_quit schrieb:
schick sie doch alle rein und mach dann in bestimmten abständen ein group? so hatte ich das mal weiß nicht ob das besser/schlechter war
Nein, dafür ist GROUP BY definitiv nicht gedacht.
-
bei MSSQL ab 2008 gibts "MERGE"
davor kann man den "insert-select-where-not-exists" trick verwenden:
INSERT tab (pk, a, b, c) SELECT value_for_pk, value_for_a, value_for_b, value_for_c WHERE NOT EXISTS (SELECT * FROM tab WHERE pk = value_for_pk)
IMO deutlich besser als die IF(EXISTS) lösung, da es nur ein statement ist, und daher "atomar" sein sollte (IIRC macht MSSQL für jedes statement implizit ne transaction mit automatischem commit, so lange man keine explizite transaction offen hat)