1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL Trigger Problem

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Rainman1981, 26 Mai 2011.

  1. Rainman1981

    Rainman1981 Neuer Benutzer

    Hallo ich brauche eure Hilfe

    Ich habe folgende Situation.

    Bei einem Warenwirtschaftsprogramm sind viele Artikel in einer Tabelle hinterlegt. Für jeden einzelnen Artikel kann man Zubehörartikel hinterlegen, die dann in einer separaten Tabelle angezeigt werden.
    Nun ist folgendes Problem bei beiden Tabellen gibt es ein Datum zu jedem Artikel (BearbeitetAm und GeändertAm) dieses ändert sich wenn man einen Zubehörartikel speichert aber leider nur bei der Zubehörtabelle.

    Ich habe die Vorgabe mittels eines SQL Triggers das Datum von der Artikel Tabelle auf das Datum zu setzen das nach Hinzufügen eines Zubehörartikels in der Zubehörtabelle steht.

    Das Ganze soll bei einem INSERT UPDATE und DELETE in der Zubehörtabelle passieren.

    Ich habe also Tabelle dbo.Art und die Tabelle dbo.Zubehoer
    die Tabelle dbo.Art hat folgende Spalten


    Code:
    ,[Artikelnummer]
    ,[EANNummer]
    ,[Bezeichnung]
    ,[Zusatz]
    ,[Matchcode]
    ,[Artikelgruppe]
    ,[Erfolgskontengruppe]
    ,[Aufwandskontengruppe]
    ,[Mengenstaffel]
    ,[SSEinkauf]
    ,[KontoEinkauf]
    ,[SSVerkauf]
    ,[KontoVerkauf]
    ,[Mengeneinheit]
    ,[Preismengeneinheit]
    ,[Preismengenfaktor]
    ,[Preisverweis]
    ,[Preiseinheit]
    ,[Gewicht]
    ,[Lagerartikel]
    ,[LosgroesseVerkauf]
    ,[Mengenformel]
    ,[Stueckliste]
    ,[StuecklistenExp]
    ,[SerieCharge]
    ,[Variantenartikel]
    ,[MinusWarnung]
    ,[Provisionsfaehig]
    ,[Rabattfaehig]
    ,[Skontofaehig]
    ,[Provisionsgruppe]
    ,[Hersteller]
    ,[HstArtikelnummer]
    ,[Lieferant]
    ,[Dispositionsart]
    ,[AutoBestellung]
    ,[Lagerstrategie]
    ,[Auslaufdatum]
    ,[Bestandsauswahl]
    ,[Inaktiv]
    ,[AngelegtAm]
    ,[AngelegtVon]
    ,[GeaendertAm]
    ,[GeaendertVon]
    ,[FreierText1]
    ,[FreierText2]
    ,[FreieZahl1]
    ,[FreieZahl2]
    ,[FreieZahl3]
    ,[FreieZahl4]
    ,[FreiesDatum1]
    ,[FreiesDatum2]
    ,[FreiesKennzeichen1]
    ,[FreiesKennzeichen2]
    ,[FreiesKennzeichen3]
    ,[FreiesKennzeichen4]
    ,[SSEG]
    ,[SSImport]
    ,[SSExport]
    ,[ShopAktiv]
    ,[Region]
    ,[Ursprungsland]
    ,[Geschaeftsart]
    ,[Warencode]
    ,[StatVersand]
    ,[StatEingang]
    ,[StatWert]
    ,[StatWertEuro]
    ,[Kostenstelle]
    ,[Kostentraeger]
    ,[DNExport]
    ,[Ausschussartikelnummer]
    ,[Produktionslager]
    ,[AusschussBewertung]
    ,[Verfallsfrist]
    ,[TS]
    
    die Tabelle dbo.Zubehoer hat folgende Spalten

    Code:
    ,[ArtArtikelnummer]
    ,[Pos]
    ,[Artikelnummer]
    ,[Mengenformel]
    ,[Mengeneinheit]
    ,[Preisgruppe]
    ,[Mengenaktualisierung]
    ,[Einfuegemodus]
    ,[Verwendung]
    ,[AngelegtAm]
    ,[AngelegtVon]
    ,[BearbeitetAm]
    ,[BearbeitetVon]
    ,[TS]
    
    Ich benutze Microsoft SQL Server und meines Wissens arbeitet man hier mit T-SQL

    Ich habe bis jetzt folgendes erstellt:


    Code:
    CREATE TRIGGER test_trigger
    ON [dbo].[ZUBEHOER]
    AFTER INSERT
    AS
    BEGIN
    SET NOCOUNT ON;
    
    DECLARE 
    @BearbeitetAm datetime,
    @ArtArtikelnummer varchar(50)
    
    
    SET @BearbeitetAm = (SELECT BearbeitetAm FROM inserted);
    SET @ArtArtikelnummer = (SELECT ArtArtikelnummer FROM inserted);
    
    
    
    UPDATE [dbo].[ART] 
    
    SET GeaendertAm = @BearbeitetAm
    
    WHERE @ArtArtikelnummer = Artikelnummer
    
    END
    
    Leider legt dieser Trigger beim Hinzufügen eines Zubehörartikels im Programm die komplette Datenbank lahm und das Programm stürzt ab.

    Gibt es hier jemand der mir bei meinem Problem helfen kann und mir sagen kann was ich falsch gemacht habe und wie es richtig zu machen ist?

    Vielen Dank schon mal im Voraus für die Hilfe
     
  2. ukulele

    ukulele Datenbank-Guru

    Der Grund des Absturzes scheint mir nicht in deinem Trigger zu liegen, der sieht ok aus. Eventuell gibt es noch weitere Trigger die beim Aktuallisieren anspringen und das Datum setzen oder sogar einen, der auf Ereignisse in der Artikel-Tabelle reagiert und dann in die Zubehör-Tabelle schreibt. Das wäre dann eine Endlosschleife.

    Wenn dem so sein sollte und es sich überhaupt nicht Abfangen lässt, könntest du dich mal mit TRIGGER_NESTLEVEL befassen. Allerdings würde ich erstmal schauen ob sich das Problem anderweitig umgehen lässt. http://technet.microsoft.com/en-us/library/ms182737.aspx

    Hier nochmal ein etwas anderer Code, deiner scheint mir aber auch i.O.:
    Code:
    CREATE TRIGGER test_trigger
    ON [dbo].[ZUBEHOER]
    --AFTER INSERT
    AFTER INSERT, UPDATE, DELETE
    AS
    BEGIN
    SET NOCOUNT ON;
    
    DECLARE
    --@BearbeitetAm datetime,
    @ArtArtikelnummer varchar(50)
    
    --SET @BearbeitetAm = (SELECT BearbeitetAm FROM inserted);
    SET @ArtArtikelnummer = (SELECT ArtArtikelnummer FROM inserted) --;
    
    UPDATE [dbo].[ART]
    
    SET GeaendertAm = getdate()
    
    WHERE @ArtArtikelnummer = Artikelnummer
    
    END
    PS: Simikolons würde ich nur machen wenn nötig, die sorgen manchmal auch für Stress.
     
  3. Charly

    Charly Datenbank-Guru

    Hallo Rainman1981,

    Dein Update für ART ist falsch.

    WHERE @ArtArtikelnummer = Artikelnummer

    Richtig:
    WHERE Artikelnummer = @ArtArtikelnummer

    Gruß Charly
     
  4. ukulele

    ukulele Datenbank-Guru

    Das ist zwar besser lesbar, aber rein technisch doch gar kein Unterschied oder?
     
  5. Charly

    Charly Datenbank-Guru

    Mein Fehler. Verwechselt mit Zuweisungen:(
     
Die Seite wird geladen...

Diese Seite empfehlen