Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Datenbanken ::  INSERT nur,wenn Eintrag noch nicht vorhanden     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Heimelchen
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.06.2010
Beiträge: 325
Beitrag Heimelchen Mitglied 13:10:43 02.09.2010   Titel:   INSERT nur,wenn Eintrag noch nicht vorhanden            Zitieren

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
Unregistrierter




Beitrag INSERT IGNORE Unregistrierter 13:44:50 02.09.2010   Titel:              Zitieren

INSERT IGNORE
REPLACE
Unregistrierter




Beitrag REPLACE Unregistrierter 13:47:01 02.09.2010   Titel:              Zitieren

REPLACE
IF NOT EXISTS
Unregistrierter




Beitrag IF NOT EXISTS Unregistrierter 13:47:50 02.09.2010   Titel:              Zitieren

IF NOT EXISTS(SELECT * ...) THEN INSERT INTO ....
Heimelchen
Mitglied

Benutzerprofil
Anmeldungsdatum: 22.06.2010
Beiträge: 325
Beitrag Heimelchen Mitglied 13:52:56 02.09.2010   Titel:              Zitieren

IGNORE und REPLACE sollten es nicht sein, aber EXISTS tuts. Danke.
Unix-Tom
Moderator

Benutzerprofil
Anmeldungsdatum: 18.07.2000
Beiträge: 10398
Beitrag Unix-Tom Moderator 15:22:58 02.09.2010   Titel:              Zitieren

Es geht um MSSQL und nicht um MySQL.

REPLACE gibt es bei MSSQL nicht und ist auch nicht Standard.

_________________
Moderator für MFC, Linux, C# - NET und Datenbanken
rage_quit
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.07.2010
Beiträge: 245
Beitrag rage_quit Mitglied 19:01:43 02.09.2010   Titel:              Zitieren

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 :confused:

_________________
People who ragequit often do so because they believe that their team has no chance of success
nman
Moderator

Benutzerprofil
Anmeldungsdatum: 19.02.2002
Beiträge: 12947
Beitrag nman Moderator 20:56:06 02.09.2010   Titel:              Zitieren

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 :confused:

Nein, dafür ist GROUP BY definitiv nicht gedacht.

_________________
…but tuesday's just as bad.
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 13522
Beitrag hustbaer Mitglied 23:01:03 02.09.2010   Titel:              Zitieren

bei MSSQL ab 2008 gibts "MERGE"

davor kann man den "insert-select-where-not-exists" trick verwenden:
Code:
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)
Code:
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)
Code:
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)

_________________
"Let there be Licht..." http://lichttools.sourceforge.net/
Sehr cooles ASCII Spiel (leider nicht von mir): ASCII-Scramble - http://www.roskakori.at/ascii/
C/C++ Forum :: Datenbanken ::  INSERT nur,wenn Eintrag noch nicht vorhanden   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.