Создать триггер БД для операции crud для аудита

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

#asp.net #sql-сервер #asp.net-mvc #azure #azure-sql-database

Вопрос:

Мне нужно создать триггер DB для azure db, чтобы при нажатии пользователем кнопки изменить что-либо в таблице триггер записывал это событие в таблицу, записывал, что было изменено, временные рамки и т. Д.

В настоящее время у меня есть два основных вопроса.

1. Это моя модель

 public class UserRoles
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public Boolean Address { get; set; }
    public Boolean Email { get; set; }
    public Boolean Work { get; set; }
    public Boolean Home { get; set; }
}

public class UserRolesDbContext : DbContext
{
    public UserRolesDbContext()
        : base("DefaultConnection")
    {
       this.Database.Connection.ConnectionString = My.GetDBConnectionString();

        if (!String.IsNullOrEmpty(this.Database.Connection.ConnectionString))
        {
            this.Database.SqlQuery("here put the SQL")
        }

    }

        public DbSet<UserRoles> UserRolesCollection { get; set; }
    }
  

Должен ли я поместить триггер таким образом (в SqlQuery), если я хочу, чтобы он создавался при развертывании моего облачного сервиса?В настоящее время БД создается в Azure при выполнении развертывания…

2. Предположим, что я хочу скопировать все поля с триггером DB из таблицы UserRoles в UserRolesCopy, и когда они изменились, как аудит, как я должен написать код SQL?

 my schema name is :UserDB
MyOrginal table is:UserRoles
I want it to copy to UserRoleCopy
  

Я новичок в этой теме, и я прочитал следующую страницу в MSDN

http://msdn.microsoft.com/en-us/library/ms189799(v=sql.120).aspx

— Синтаксический триггер базы данных SQL Windows Azure
для оператора INSERT, UPDATE или DELETE для таблицы или представления (триггер DML)

 CREATE TRIGGER [ schema_name . ]trigger_name 
ON { table | view } 
 [ WITH <dml_trigger_option> [ ,...n ] ] 
{ FOR | AFTER | INSTEAD OF } 
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
  AS { sql_statement  [ ; ] [ ,...n ] [ ; ] > }

<dml_trigger_option> ::= 
        [ EXECUTE AS Clause ] 
  

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

1. На этой странице также приведены примеры CREATE TRIGGER — пытались ли вы адаптировать какой-либо из них и предпринять реальную попытку выполнить эту работу самостоятельно?

Ответ №1:

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

  1. Используйте спецификации аудита базы данных

    Создайте спецификацию аудита сервера и аудита базы данных

  2. CDC (сбор данных изменений)

    Об изменении сбора данных

  3. Триггер DML

>

 Create Trigger yourSchema.TriggerName ON YourTable
AFTER INSERT, Update, Delete
AS Begin
  -- Log Deleted Rows and Old Value in Updated Rows
  Insert Into LogTable(UserName, Columns)
  Select CURRENT_USER, Columns
  From Deleted

  -- Log Inserted Row and New Value in Updated Rows
  Insert Into LogTable(UserName, Columns)
  Select CURRENT_USER, Columns
  From Inserted
End
  

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

1. Большое спасибо проголосовавшим, поскольку я новичок в этой теме, куда мне следует поместить исходное имя таблицы (UserRoles ) и скопированную таблицу (UserRolesCopy), и куда мне следует поместить свойства таблицы или ключ, если это необходимо? …2. что такое имя триггера, таблица журнала, столбцы? должен ли я использовать его как есть жестко запрограммированным? извините за основной вопрос, я действительно новичок в этой теме…

2. Пожалуйста, посмотрите мою правку. Я предлагаю вам использовать метод 1 для изменения ваших данных в аудите. Если вы можете использовать метод 1, сообщите мне для получения дополнительной информации.

3. Спасибо, но я не могу сделать это вручную, мне нужно, чтобы он был исчерпан при развертывании моей облачной службы Azure (например, при создании таблиц), возможно ли это?

4. Я не работаю с облачной службой Azure. и я не знаю.