| Autor |
Nachricht |
Heimelchen
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.06.2010
Beiträge: 325
|
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
|
INSERT IGNORE Unregistrierter
13:44:50 02.09.2010 Titel: |
|
Zitieren |
|
 |
REPLACE
Unregistrierter
|
REPLACE Unregistrierter
13:47:01 02.09.2010 Titel: |
|
Zitieren |
|
 |
IF NOT EXISTS
Unregistrierter
|
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
|
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
|
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
|
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 |
_________________ 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
|
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  |
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
|
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/
|
|
 |