Announcement

Collapse
No announcement yet.

SQL Insert oder Update

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Insert oder Update

    Hallo,

    ich möchte Einträge in eine Datenbank schreiben. Die SQL Anweisung muss unterscheiden, ob ein Eintrag vorhanden ist (und diesen dann Updaten) oder per Insert einen neuen Eintrag erstellen, wenn noch keiner vorhanden ist.

    Ob ein Eintrag vorhanden ist oder nicht, sieht man an einer Spalte in der IP Adressen stehen. Ist die IP Adresse bereits vorhanden, dann wird ein update für die spalte ausgeführt.. wenn nicht, dann wird sie per insert neu eingefügt.

    Jmd. ne Idee, wie ich das in EINE SQL Anweisung packe? für MS SQL 2005 !!

    Danke

  • #2
    Hallo!

    Mir faellt in diesem Zusammenhang nur eine Moeglichkeit ein - eine Stored Procedure.

    Du muesstest der SP die Werte uebergeben und diese fuehrt dann als erstes einen SELECT (zB ein SELECT COUNT(ID-Spalte) FROM ...) auf die ID-Spalte (IP Adressen in deinem Fall) aus.
    Enthaelt der SELECT Daten, muss ein UPDATE, ansonsten ein INSERT ausgefuehrt werden; das heisst in einer SP koennten alle drei SQL Command (SELECT, INSERT und UPDATE) einhalten sein.

    Hoffe das hilft dir weiter.
    *-- robert.oh. --*

    Comment


    • #3
      Hallo Bonsai,

      hiermit solltest Du es hinbekommen

      IF EXISTS (SELECT PK_Feld FROM Tabelle WHERE PK_Feld = Wert )
      UPDATE USysSecurityPermissions
      SET Feld1 = Wert1, Feld2 = Wert2, ...
      WHERE PK_Feld = Wert
      ELSE
      INSERT INTO Tabelle (Feld1, Feld2, ...)
      VALUES (Wert1, Wert2, ...)

      Gruß, Olaf
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        Hallo,

        ein vollständiges Beispiel würde so aussehen:

        Code:
        CREATE PROCEDURE spBLZUpdate
        (
          @sBLZ  VARCHAR(8),
          @sORT  VARCHAR(50) = NULL,
          @sBANK VARCHAR(50) = NULL
        )
        AS
          DECLARE @iMode INT
          SET NOCOUNT ON
          SET @iMode = 0
          IF NOT EXISTS (SELECT * FROM dbo.BLZ b WHERE b.BLZ = @sBLZ)
            BEGIN
              INSERT dbo.BLZ (BLZ,Ort,Bank) 
              VALUES (@sBLZ,@sORT,@sBANK) 
              IF @@ROWCOUNT = 1
                SET @iMode = 1
            END
          ELSE
            BEGIN
              UPDATE dbo.BLZ SET
                Ort = @sORT,
                Bank = @sBANK
              WHERE BLZ = @sBLZ
              IF @@ROWCOUNT = 1
                SET @iMode = 2
            END
          SET NOCOUNT OFF
        RETURN @iMode
        GO
        Über den Rückgabewert kann die aufrufende Stelle erkennen, ob ein neuer Datensatz eingefügt wurde oder ob ein bereits vorhandener Datensatz aktualisiert wurde.

        Comment

        Working...
        X