2011-01-03 12 views
0

bekomme ich diesen Fehler:STATT UPDATE TRIGGER für eine Tabelle mit Fremdschlüssel

Cannot create INSTEAD OF DELETE or INSTEAD OF UPDATE TRIGGER 'trig_Income_Updater' on table 'MYBUDGET.tbl_Income'. This is because the table has a FOREIGN KEY with cascading DELETE or UPDATE.

I 'FOR UPDATE' verwenden kann. aber wie man es macht, das ursprüngliche Update zu ignorieren?

Antwort

1

einfach die Felder, die Sie wollen, und dann „Rückgängig“ das ursprüngliche Update mit dem " eingefügt "und" gelöschte "temporäre Tabellen, die dem Trigger zur Verfügung gestellt werden.

Zum Beispiel (nicht getestet):

--Do the stuff you want 
UPDATE table SET fields = values WHERE some condition 


--Undo the original update (minus anything you WANT changed above) 
UPDATE table SET unchangingfield = deleted.unchangingfield WHERE ID = deleted.ID 

Die „eingefügt“ Tabelle, die die neuen Werte enthalten wird, und die „gelöschte“ Tabelle enthält die Werte, die sich geändert werden. Sie können sie beitreten, abfragen und auf andere Weise behandeln, als wären sie echte Tabellen.

2

Um das ursprüngliche Update zu ignorieren, müssen Sie einen RAISERROR und dann ROLLBACK verwenden.

Here ist ein Beispiel unter dem Aktualisierungsabschnitt „AFTER-Trigger eine DML Mit einer Geschäftsregel zwischen den PurchaseOrderHeader und Vendor-Tabellen zu erzwingen“

+2

ROLLBACK wird alle Dinge ignorieren, die ich im Trigger ausgeführt habe, bevor die ROLLBACK-Anweisung ausgeführt wird. Was ich brauche, ist nur die ursprüngliche Update-Anweisung zu ignorieren. – Sency