Wieder mal Trigger Update: Bedingung

MysterioJN

SQL-Guru
Beiträge
158
Moin,

hab ja jetzt ein paar Triggererfahrungen erleben dürfen und auch einiges umgesetzt.

An einer "Logik" hänge ich immer noch:

Tabelle: MedienProgramm

ID / Artikelnummer / Auflage / ImVertrieb (ja/nein = bit)

1 / 20 / 1.Auflage / Ja
2 / 20 / 2.Auflage / Nein

Wenn der Redakteur den Datensatz der ID 2 bearbeiten will und dort den "ImVertrieb" auf "ja" stellen will, soll er prüfen, ob es schon eine andere ID gibt, die die SELBE Artikelnummer hat UND auch sich im Vertrieb = "ja" befindet.

Wenn das der Fall ist, am besten nichts machen und eine Massagebox ;) Aber glaub mit MSGBox geht nicht.
Daher soll es dann einfach nicht möglich sein, im aktiven Artikel auch ein "Ja" setzten zu können.

Der Anwender muss dann manuell zum Datensatz des bereits im Vertrieb befindlichen gehen (in dem Fall ID 1), dort aus "Ja" ein "Nein" machen und kann dann die neuere Auflage (ID 2) als "ja" setzten.

Hoffe es ist nicht zu verwirrend ;-/

Ziel soll es sein, das nicht zwei gleiche Artikel in unterschiedlichen Auflagen gleichzeitig im Shop angeboten werden sollen !

Hoffe es gibt eine einfache Lösung. Danke fürs helfen !!
 
Werbung:
Code:
CREATE TRIGGER   [dbo].[MedienProgramm_check_ImVertrieb]
   ON       [dbo].[MedienProgramm]
   INSTEAD OF INSERT, UPDATE
AS

BEGIN
   SET NOCOUNT ON;

   DECLARE   @error VARCHAR(2000)

   IF EXISTS (   SELECT   1
         FROM   INSERTED i
         INNER JOIN MedienProgramm t
         ON     i.Artikelnummer = t.Artikelnummer
         AND     i.ID != t.ID
         WHERE   i.ImVertrieb = 1
         AND     t.ImVertrieb = 1 )
   BEGIN
     SET     @error = 'Nein nein nein.'

     RAISERROR(@error,16,1)
   END
   ELSE
   BEGIN
     INSERT INTO MedienProgramm(ID,Artikelnummer,Auflage,ImVertrieb)
     SELECT   i.ID,
         i.Artikelnummer,
         i.Auflage,
         i.ImVertrieb
     FROM   INSERTED i
     LEFT JOIN DELETED d
     ON     i.ID = d.ID
     WHERE   d.ID IS NULL

     UPDATE   MedienProgramm
     SET     MedienProgramm.Artikelnummer = i.Artikelnummer,
         MedienProgramm.Auflage = i.Auflage,
         MedienProgramm.ImVertrieb = i.ImVertrieb
     FROM   MedienProgramm
     INNER JOIN INSERTED i
     ON     MedienProgramm.ID = i.ID
     INNER JOIN DELETED d
     ON     MedienProgramm.ID = d.ID
   END
END
Sieht jetzt viel aus, ist aber eigentlich nur der Tatsache geschuldet das man bei einem INSTEAD OF-Trigger den Insert oder das Update selber machen muss/darf. In diesem Fall wird entweder die ganze Operation abgebrochen wenn irgendein einzufügender Datensatz den Fehler hervorruft oder das Insert/Update wird ausgeführt.
 
Zurück
Oben