Announcement

Collapse
No announcement yet.

Autoincrement mit Trigger nachbauen

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

  • Autoincrement mit Trigger nachbauen

    Hallo zusammen,

    ich baue gerade einen Trigger, der die Autoincrement "simuliert"

    Code:
    CREATE TRIGGER trig_account_number ON dbo.AccountBase 
    FOR INSERT AS
    	DECLARE @accountID INT;
    		IF(NEW.accountnumber IS NULL) \\Accountnumber ist Feld in Tabelle dbo.AccountBase
    	SET @accountID = (SELECT MAX(accountnumber)+1 from dbo.AccountBase);
    	SET NEW.accountnumber = @accountID;
    In der letzten Zeile in der ich den Wert aus @accountID zuweisen will bekomme ich den Fehler: Falsche Syntax in der Nähe von '.'

    Bin leider auch noch nicht sehr mit der Syntax von MS SQL vertraut und komme auch nach Internetrecherche nicht weiter

  • #2
    Ich glaube, du kommst von einer anderen Datenbank, wo man in einem Trigger noch Felder ändern konnte. Beim SQL-Server gibt es sowas nicht. Und es gibt nicht mal ROW-LEVEL-basierende Trigger! Du hast also die Möglichkeit entweder vor einer Aktion mit einem INSTEAD-OF-Trigger etwas zu unternehmen oder mit einem AFTER-Trigger zu arbeiten. Und innerhalb des Triggers heissen die beiden Tabellen mit den betroffenen Datensätzen 'inserted' und 'deleted', nicht 'old' und 'new'. Und wie gesagt kann man nur daraus lesen aber nichts reinschreiben. Und auch wenn man 100 Zeilen auf einmal ändert, wird der Trigger nur ein einziges Mal (nämlich am Schluss) ausgeführt und alle 100 Datensätze stehen dann in inserted/deleted.

    bye,
    Helmut

    PS: warum das überhaupt? SQL-Server hat den Datentyp IDENTITY, das entspricht exakt dem Autoincrement.

    Comment


    • #3
      Ahh achso,

      jaa mmhh. Dann versuch ich das nochmal entsprechend umzumodeln.
      Warum -> Der Trigger ist für MS CRM. Von der alten Kundendatenbank sollen allerdings die Firmennummern erhalten bleiben und inkrementell bei Neuanlage hochgezählt werden. Daher auch die Idee und meine Vorgehensweise. Hilft mir Identity, wenn ich das Feld Accountnumber ändere und natürlich auch schon Werte vorhanden sind? Ich kenne das von anderen DB`s nur so, dass ich das nicht nachträglich machen kann.

      Danke und Gruß

      Comment


      • #4
        Um Identity-Werte selber eintragen zu können gibt es die Option SET IDENTITY_INSERT Tabelle ON/OFF. Damit kann man kurzzeitig das automatische Nummernerstellen ausschalten und selber den Wert eintragen.

        bye,
        Helmut

        Comment


        • #5
          Hab ich das richtig verstanden?
          Ich könnte nun nachträglich den Befehl geben das der Wert in accountnumber bei Neuerstellung den Maxwert ermittelt 1 dazuzählt und dann in den neu gespeicherten Datensatz reinschreibt.

          Comment


          • #6
            Im Prinzip ja, aber guter Programmierstil wäre das nicht gerade. Du müsstest zB selber darauf achten, dass nicht zwei Benutzer das gleichzeitig machen.

            bye,
            Helmut

            Comment


            • #7
              Nee, da hol ich mir ja die Probleme mit offener Tür ins Haus. Das lass ich dann mal.
              Trotzdem danke

              Comment

              Working...
              X