Announcement

Collapse
No announcement yet.

Trigger für MS SQL 2005

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

  • Trigger für MS SQL 2005

    Hallo,

    ich habe eine Tabelle mit dem Namen BHS1 in der befindet sich, unter anderem, ein Feld BARCODE (varchar(50)), der Barcode der dort eingetragen wird ist IMMER 12stellig, ich will aber die letzten beiden Automatisch löschen so das nur ein 10stelliger Barcode ( rein Nummerisch ) effektiv eingetragen wird
    Das sollte doch mit einem Trigger Typ Update funktionieren, nur bekomme ich die Sytax nicht hin.... Bin für jede Hilfe dankbar

    mfg

    D. Schubert(Theatermann)

  • #2
    Kannst ja Deinen Versuch posten samt Fehlermeldung ...

    Comment


    • #3
      Code:
      ALTER TRIGGER [dbo].[TransformBarcodeUpdated]
         ON  [dbo].[BarcodeTabelle]
      AFTER UPDATE
      AS
      BEGIN
      	DECLARE @realBarcode VARCHAR(50)
      	DECLARE @id int
      
      	DECLARE myCursor CURSOR FOR SELECT id, Barcode from inserted
      
      	OPEN myCursor
      
      	Fetch Next From myCursor into @id, @realBarcode
      
      	WHILE (@@FETCH_STATUS <> -1)
      		BEGIN
      			IF UPDATE(Barcode)
      			BEGIN
      				Update [BarcodeTabelle] SET Barcode = CAST(@realBarcode as VARCHAR(10)) WHERE [BarcodeTabelle].id = @id
      			END
      			Fetch Next From myCursor into @id, @realBarcode
      		end
      	CLOSE myCursor
      	DEALLOCATE myCursor 
      END
      für Insert äquivalent

      Comment


      • #4
        Hallo,

        habe das Beispiel von Zunera angepasst, doch ich bekomme immre eine Fehlermeldung die ich nicht deuten kann...

        Meldung 208, Ebene 16, Status 6, Prozedur BarCodeUpdate, Zeile 24
        Ungültiger Objektname 'BarCodeUpdate'.



        ALTER TRIGGER BarCodeUpdate
        ON [dwdata].[dbo].[BSH1]
        AFTER UPDATE
        AS
        BEGIN
        DECLARE @realBarcode VARCHAR(50)
        DECLARE @id int

        DECLARE myCursor CURSOR FOR SELECT DWDOCID, Barcode from inserted

        OPEN myCursor

        Fetch Next From myCursor into @id, @realBarcode

        WHILE (@@FETCH_STATUS <> -1)
        BEGIN
        IF UPDATE(Barcode_BSH)
        BEGIN
        Update [BSH1] SET Barcode_BSH = CAST(@realBarcode as VARCHAR(10)) WHERE [BSH1].DWDOCID = @id
        END
        Fetch Next From myCursor into @id, @realBarcode
        end
        CLOSE myCursor
        DEALLOCATE myCursor
        END

        Comment


        • #5
          Originally posted by Theatermann View Post
          Hallo,
          habe das Beispiel von Zunera angepasst, doch ich bekomme immre eine Fehlermeldung die ich nicht deuten kann...
          Keine Ahnung, ich würde eh das ganze Cursor-Geraffel weglassen...
          Vielleicht gehts ja so...
          [HIGHLIGHT="SQL"]ALTER TRIGGER BarCodeUpdate
          ON [dwdata].[dbo].[BSH1]
          AFTER UPDATE AS
          BEGIN;
          UPDATE [BSH1]
          SET Barcode_BSH = SUBSTRING (Barcode_BSH, 1, 10)
          WHERE [BSH1].DWDOCID IN (SELECT DWDOCID from inserted);
          END; [/HIGHLIGHT]

          Comment


          • #6
            Hallo,
            Originally posted by Theatermann View Post
            Meldung 208, Ebene 16, Status 6, Prozedur BarCodeUpdate, Zeile 24
            Ungültiger Objektname 'BarCodeUpdate'.
            Wenn du das Statement direkt kopierst und ausführst ist klar, dass du diesen Fehler bekommst. ALTER TRIGGER kann natürlich nur funktionieren wenn es den Trigger bereits gibt. Also zuerst mit CREATE TRIGGER aufrufen.

            ebis' Lösung ist sehr wahrscheinlich performanter als Zunera's.
            Allerdings kann man dort natürlich auch vorher noch auf ein Update der Barcode-Spalte prüfen.

            lg chapster

            Comment


            • #7
              Hallo,

              vielen Dank für die vielen positiven Feedbacks, das mit dem Alter Trigger ist echt Peinlich, klar musste ich Create Trigger nehmen, hat alles soweit geklappt, DANKE....

              liebe Grüße

              Comment

              Working...
              X