Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Trigger mit where clause

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von T.Melzer, 17 Mai 2013.

  1. T.Melzer

    T.Melzer Neuer Benutzer

    Ich stehe vor der folgenden Anforderung und habe keinen Lösungsansatz:

    In der Tabelle A sind Daten enthalten die bei Veränderung (update) oder beim Anfügen (insert) mittels Trigger in eine Tabelle B geschrieben bzw. aktualisiert werden sollen.
    Das ist ja kein Problem, doch in Tabelle A sind nicht alle Datensätze, die so behandelt werden sollen.
    So sind dort z.B. Adressen gespeichert wie Kunden, Lieferanten, Interessenten usw. und lediglich für den Adresstyp Kunden soll der Trigger angewendet werden.

    Ist da überhaupt lösbar? Ich finde in der MS SQL Dokumentation leider keine Hinweise zu einer möglichen Syntax und Google half bisher auch nicht :(
    Vielleicht hat hier ja jemand eine Idee.

    Besten Dank,
    Thorsten
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Nennt sich conditional trigger, also in PostgreSQL. Ob das mit M$SQL geht weiß ich aber nicht. Demo:

    Code:
    test=# create table foo (a int, b int);
    CREATE TABLE
    Time: 16,195 ms
    test=*# create function f_trigger () returns trigger as $$begin raise notice 'trigger'; return new; end;$$language plpgsql;
    CREATE FUNCTION
    Time: 0,580 ms
    test=*# create trigger trg before insert or update on foo for each row when (new.b=1) execute procedure f_trigger();
    CREATE TRIGGER
    Time: 0,394 ms
    test=*# insert into foo values (1,1);
    NOTICE:  trigger
    INSERT 0 1
    Time: 0,860 ms
    test=*# insert into foo values (2,2);
    INSERT 0 1
    Time: 0,176 ms
    
    
    Das NOTICE kommt nur bei b=1, nicht bei b=2.

    Ansonsten mußt Du das eben innerhalb der Triggerfunktion prüfen und diese verlassen, wenn die Bedingung nicht paßt.
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich wüsste jetzt drei Möglichkeiten:

    A) Dein Trigger feuert nur wenn Bedingungen erfüllt wurden. Z.B.:
    Code:
    ALTER TRIGGER    [dbo].[adr]
        ON            [dbo].[adr]
        AFTER UPDATE, INSERT
    AS
    IF (    SELECT    kunde
            FROM    INSERTED ) = 1
    BEGIN
    B) Dein Trigger guckt im nachhinein ob per IF Abfrage ob wirklich aktualisiert werden muss...
    C) Dein UPDATE-Statement im Trigger hat einer WHERE Bedingung die prüft ob es sich um einen Kunden handelt.

    A ist für mich hier naheliegend, sofern es ein Flag gibt das diese Adresse klar als Kunden kennzeichnet oder etwas ähnlich leicht prüfbares.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden