Abfrage im Trigger gibt kein erwartungsvolles Ergebnis

Ich habe versucht, die folgende Ausgabe durch Trigger in SQL server 2005. Ich bin mit dieser Abfrage, um die Werte des age (Spaltenname) auf Null ändern, wenn es weniger als Null ist.

 Create trigger agecheck on account for insert as begin Declare @age int select @age = age from inserted if @age < 0 set @age = 0; 

Ende

Ich konnte diese Abfrage erfolgreich ausführen, aber ich bekomme kein erwünschtes Ergebnis. Ich verwende SQL server 2005.

Könnten Sie bitte darauf hinweisen.

Was du in deinem Trigger @age , setzt die Variable @age auf 0, wenn es weniger als 0 ist. Wenn du das Alter in eine @age Variable @age , verknüpft diese Variable nicht mit deinem Feld in der Tabelle.

Nicht nur das, die inserted virtuelle Tabelle kann mehr als eine Zeile darin haben. Ihre select-statement würde nur das letzte age von der Abfrage an die Variable zurückgegeben wird.

Was Sie tun müssen, ist die Tabelle, die eingefügt wurde, mit der inserted virtuellen Tabelle auf seinem Primärschlüssel.

Angenommen, Ihre account Tabelle hat als account_id , das würde die folgende create-statement geben:

 CREATE TRIGGER agecheck ON account AFTER INSERT AS BEGIN UPDATE account SET age=0 FROM inserted AS i INNER JOIN account AS a ON a.account_id=i.account_id WHERE i.age<0 END