Создать триггер DB для Sql DB

#asp.net #sql #sql-server #database #azure

#asp.net #sql #sql-сервер #База данных #azure

Вопрос:

Я новичок в работе с БД, и мне нужно создать триггер БД для Azure SQL DB.

Сначала я создал проект MVC5 с моделью, и у меня есть эта модель, которая отражает таблицу БД.

     public class Employee
    {
        public int Id { get; set; }
        public string EmployeeName { get; set; }
        public string EmpAddress { get; set; }
        public string EmpEmail { get; set; }
        public string EmpPhone { get; set; }

    }

    public class EmployeeDbContext : DbContext
    {
        public EmployeeDbContext()
            : base("DefaultConnection")
        {

        }
            public DbSet<Employee> EmployeeCollection { get; set; }
        }

}
 

Теперь я хочу создать для него триггер DB, и я пытаюсь сделать следующее.(Я беру этот пример из SO и настраиваю его …)

 Create Trigger Dbo.triggerName ON Employee
AFTER INSERT, Update, Delete
AS Begin
  -- Log Deleted Rows and Old Value 
  Insert Into EmployeeCopy(Id ,EmployeeName, EmpAddress,EmpEmail,EmpPhone)
  Select CURRENT_EMPLOYEE, Columns
  From Deleted

  -- Log Inserted Row and New Value 
  Insert Into EmployeeCopy(Id ,EmployeeName, EmpAddress,EmpEmail,EmpPhone)
  Select CURRENT_EMPLOYEE, Columns
  From Inserted
End
 

Я хочу, чтобы он создал новую таблицу, которая является EmployeeCopy, и скопировал в нее все строки.
итак, это мой вопрос (я новичок в этой теме)

 1. what is the trigger name?
2.Do I write the Insert into right ?
3. Select CURRENT_EMPLOYEE, Columns ..Here Im not sure if this is the right way to write it?
 

Комментарии:

1. Имя триггера может быть любым, которое вы хотите назвать триггером, например. Скопируйте Employee. Ваша вставка в будет выглядеть следующим образом — Вставьте в EmployeeCopy(Id, EmployeeName, EmpAddress, EmpEmail, emphone) Выберите Id, EmployeeName, EmpAddress, EmpEmail, EmpHone.

Ответ №1:

Ваше insert into заявление может быть изменено (см. Ниже) — но вы не указали условие вашего выбора => вы, вероятно, будете вставлять все строки из ваших удаленных и вставленных таблиц при каждой операции запуска.

Смотрите более подробную информацию о insert into, например, здесь .

Вероятно, вам следует написать и протестировать оператор select как отдельный запрос (просто запустите его из нового окна запроса), когда вы получите ожидаемые результаты — поместите его в логику триггера.

Как правило, я предлагаю попробовать каждую часть вашей логики запуска в виде отдельных операторов.

 Create Trigger dbo.MyTrigger ON Employee
AFTER INSERT, Update, Delete
AS Begin
  -- Log Deleted Rows and Old Value 
  Insert Into EmployeeCopy
   Select (Id ,CURRENT_EMPLOYEE, EmpAddress,EmpEmail,EmpPhone)
   From Deleted
   WHERE Your_conditions_logic_here

  -- Log Inserted Row and New Value 
  Insert Into EmployeeCopy 
   Select  (Id ,CURRENT_EMPLOYEE, EmpAddress,EmpEmail,EmpPhone)
   From Inserted
   WHERE Your_conditions_logic_here
End