SQL-Server-trigger - SET-variable = Spalte.Wert

Ich versuche, einen trigger erstellen, die auf Tabelle component und Protokollierung UPDATE, DELETE und INSERT Bedienung an den Tisch component_history

CREATE TRIGGER component_hist
ON component
AFTER INSERT, UPDATE, DELETE
AS

DECLARE
   @tr_action varchar(8),
   @tr_id_compoment int,
   @tr_name varchar(max),
   @tr_value int

IF COLUMNS_UPDATED() <> 0 -- delete or update?
BEGIN     
  SET @tr_action = 'UPDATE'
ELSE -- delete     
BEGIN
  SET @tr_action = 'DELETE'
END

INSERT INTO component_history VALUES (@tr_id_component, @tr_name, @tr_value, @tr_action);

Wie kann ich Informationen aus Spalten (id, name, value) aus der Tabelle component in component_history?

Ich versucht habe:

SET 
@tr_id_component = component.id,
@tr_name = component.name,
@tr_value = component.value

aber es berichten:

Msg 4104, Ebene 16, Status 1, Prozedur component_hist, Zeile 22

Der mehrteilige Bezeichner " - Komponente.id" konnte nicht gebunden werden.

  • Einige element der anwser zu deiner Frage hier: stackoverflow.com/questions/1751715/...
  • Vorausgesetzt, mindestens ein insert wurde bereits erfolgreich verarbeitet (also Zeilen in der Tabelle vorhanden sind), EXISTS (SELECT * FROM component) wird immer wahr sein. Und Trigger einmal pro Anweisung, nicht einmal pro Zeile, so zu denken, setzen von Werten in Variablen ist immer falsch im Kopf.
  • Es ist eine zweite Sache, es war eine Konstruktion für ORACLE, aber MSSQL nicht unterstützt, BEVOR die Anweisung, so dass ich mit NACH nur für jetzt (ich weiß nicht, wie zu lösen, BEVOR) :((
InformationsquelleAutor gaffcz | 2012-05-30
Schreibe einen Kommentar