Как обратиться к значениям, которые были только что вставлены (в операторе TRIGGER)? - PullRequest
1 голос
/ 17 мая 2011
CREATE TRIGGER ATTENDANCE_INSERTION_TRIGGER
ON course_enrollment
AFTER INSERT
AS
BEGIN

--insert **what just was inserted in course_enrollment** into course_schedule_attendance

END
GO

Как мне обратиться к , что только что было вставлено в course_enrollment ?

Ответы [ 3 ]

4 голосов
/ 17 мая 2011

попробуйте это:

CREATE TRIGGER ATTENDANCE_INSERTION_TRIGGER 
ON course_enrollment 
AFTER INSERT 
AS 
BEGIN

  --insert **what just was inserted in course_enrollment** into
  -- course_schedule_attendance  
  INSERT course_schedule_attendance  
      (course_id, student_id)
    SELECT
      course_id, student_id --you could use: INSERTED.course, INSERTED.student_id
      FROM INSERTED
END 
GO 

Вы также можете сделать это в одной вставке, без триггера:

--insert a single row in both tables at one time
INSERT course_enrollment 
      (course_id, student_id)
      OUTPUT course_id, student_id INTO course_schedule_attendance  
   VALUES (@xyz, @abc)

--or insert a set of rows into both at one time
INSERT course_enrollment 
      (course_id, student_id)
      OUTPUT course_id, student_id INTO course_schedule_attendance  
   SELECT
       xyz, abc
       FROM ...
1 голос
/ 17 мая 2011

Вы можете получить значения из вставленной таблицы

SELECT * FROM INSERTED I

Так, например, если для course_enrollment есть поля с названиями course_id и student_id, для получения этих полей вы можете сделать

SELECT I.course_id,I.student_id FROM INSERTED I -- I is just an alias and is not needed but it helps
0 голосов
/ 17 мая 2011

Существуют две полезные мета-таблицы триггеров, каждая из которых соответствует схеме таблицы, в которой активирован триггер: INSERTED и DELETED.

Интересно, что если вы запустите оператор обновления, мета-таблицы триггера будут иметь строки как INSERTED, так и DELETED, строки DELETED, соответствующие «до обновления» и INSERTED с «после обновления».

Это также делает его полезным для целей аудита.

...