Announcement

Collapse
No announcement yet.

instead of delete - trigger

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

  • instead of delete - trigger

    Hallo,
    <br>
    vielen Dank für die schnelle Antwort. Das mit den Benutzerrechten habe ich voll übersehen und die Lösung für den Trigger ist so einfach, dass es ja schon peinlich ist zu fragen.
    <br>
    <br>
    Torste

  • #2
    instead of delete - trigger

    hallo,
    <br>
    ich möchte im das Löschen eines Datensatzes verhindern, wenn ein Feld einen bestimmten Wert enthält. <br>Mein erster Gedanke war an eine Stored Procedure, was passiert aber wenn der Benutzer nicht die Procedure benutzt. <br>Mein nächster Gedanke war ein Trigger, beim SQLServer also ein Instead of delete - Trigger. Aber wie verhindere ich das Löschen, bzw. wie bekomme den Datensatz aus der deleted-Tabelle.

    Torsten

    Comment


    • #3
      Hallo,

      &gt;..was passiert aber wenn der Benutzer nicht die Procedure benutzt?

      Wenn der Benutzer nur Rechte für das Ausführen der SP besitzt, aber keine Rechte an der Basistabelle, kann es nicht zu Problemen kommen.

      &gt; Wie verhindere ich das Löschen...

      Das folgende Beispiel demonstriert diesen Fall:
      <pre>
      USE tempdb
      <b>GO</b>
      <br>
      <b>CREATE</b> <b>TABLE</b> TriggerDemo
      (
      RecID <b>INTEGER</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
      Wert <b>VARCHAR</b>(9) <b>NOT</b> <b>NULL</b>
      )
      <b>GO</b>
      <b>INSERT</b> <b>INTO</b> TriggerDemo (Wert) <b>VALUES</b> (<font color="#9933CC">'A'</font>)
      <b>INSERT</b> <b>INTO</b> TriggerDemo (Wert) <b>VALUES</b> (<font color="#9933CC">'B'</font>)
      <b>INSERT</b> <b>INTO</b> TriggerDemo (Wert) <b>VALUES</b> (<font color="#9933CC">'C'</font>)
      <b>INSERT</b> <b>INTO</b> TriggerDemo (Wert) <b>VALUES</b> (<font color="#9933CC">'D'</font>)
      <b>GO</b>
      <br>
      <b>CREATE</b> <b>TRIGGER</b> trDEL_TriggerDemo <b>ON</b> TriggerDemo INSTEAD <b>OF</b> <b>DELETE</b>
      <b>AS</b>
      <b>BEGIN</b>
      <b>DELETE</b> <b>FROM</b>
      TriggerDemo
      <b>WHERE</b>
      RecID <b>IN</b> (<b>SELECT</b> RecID <b>FROM</b> deleted <b>WHERE</b> Wert &lt;&gt; <font color="#9933CC">'C'</font>)
      <b>END</b>
      <b>GO</b>
      <br>
      -- <b>Trigger</b> testen
      <b>DELETE</b> <b>FROM</b> TriggerDemo
      </pre>
      Ergebnis der letzten SELECT-Abfrage: Der Datensatz mit dem Wert C in der Spalte Wert wurde nicht gelöscht.
      <pre>
      RecID Wert
      ----------- ---------
      3 C
      <br>
      (1 row(s) affected)
      </pre>
      Siehe auch <i>http://www.entwickler.com/itr/features/psecom,id,119,nodeid,77.html</i&gt

      Comment


      • #4
        Hallo,

        &gt;..dass es ja schon peinlich ist zu fragen.

        als Entschuldiung kann man durchaus anführen, dass sich der MS SQL Server an dieser Stelle (INSTEAD OF-Trigger) völlig anders verhält als der Rest. Wenn man somit vorher mit anderen SQL-Datenbanken Erfahrungen gesammelt hat, muss man sich erst langsam an dieses Feature gewöhnen ;-

        Comment

        Working...
        X