SQL Trigger Problem

Rainman1981

Neuer Benutzer
Beiträge
1
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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
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.
 

Charly

Datenbank-Guru
Beiträge
306
Hallo Rainman1981,

Dein Update für ART ist falsch.

WHERE @ArtArtikelnummer = Artikelnummer

Richtig:
WHERE Artikelnummer = @ArtArtikelnummer

Gruß Charly
 
Werbung:
Oben