#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