Должен ли я использовать шаблон из MS SQL Management Studio для создания новых триггеров? - PullRequest
2 голосов
/ 20 сентября 2010

Если вы создаете новый триггер в MS SQL Management Studio с помощью графического интерфейса, он дает вам этот шаблон:

--====================================
--  Create database trigger template 
--====================================
USE <database_name, sysname, AdventureWorks>
GO

IF EXISTS(
  SELECT *
    FROM sys.triggers
   WHERE name = N'<trigger_name, sysname, table_alter_drop_safety>'
     AND parent_class_desc = N'DATABASE'
)
    DROP TRIGGER <trigger_name, sysname, table_alter_drop_safety> ON DATABASE
GO

CREATE TRIGGER <trigger_name, sysname, table_alter_drop_safety> ON DATABASE 
    FOR <data_definition_statements, , DROP_TABLE, ALTER_TABLE> 
AS 
IF IS_MEMBER ('db_owner') = 0
BEGIN
   PRINT 'You must ask your DBA to drop or alter tables!' 
   ROLLBACK TRANSACTION
END
GO

Должен ли я использовать этот шаблон?

Я ничего не знаю о триггерах, но думаю, что мне нужно их использовать. Цель в этом случае заключается в том, что при вставке в таблицу мне нужно обновить одно из полей.

Пожалуйста, помогите мне начать!

Ответы [ 3 ]

5 голосов
/ 21 сентября 2010

Хорошо, для начала, это неправильный шаблон, если вы хотите обычный триггер, который является триггером для внесения структурных изменений в саму таблицу.

Если вы решили выполнить триггер, который влияет на данные (в отличие от структуры), вам нужно знать несколько вещей.Первый и, безусловно, самый важный, триггеры работают с наборами данных, а не по одной строке за раз.Вы должны написать любой триггер для обработки нескольких строк insertts_updates или delete.Если в результате вы получите какой-либо код, устанавливающий значение для вставленной или удаленной переменной, существует вероятность того, что она будет работать некорректно, если задействовано несколько записей.

Что вставлено или удалено, спросите вы?Это следующее, что вам нужно знать о триггерах, есть две псевдотаблицы (вставленные и удаленные), которые доступны только в триггере (или предложении вывода), которые содержат вставляемую новую информацию или обновленные значения (во вставленной таблице) и старая информация, удаляемая или изменяемая обновлением (в удаленной таблице).Таким образом, вставка имеет значения во вставленном, удаление имеет значения в удаленном, а обновление имеет значения в обоих.Используйте их в своем триггере, чтобы получить значения, которые нужно изменить.

1 голос
/ 20 сентября 2010

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

Я бы предложил начать с этого урока

http://www.sqlteam.com/article/an-introduction-to-triggers-part-i

Вы можете использовать приведенный выше SQL в качестве шаблона или просто написать свой собственный. Я бы посоветовал вам написать свой, так как вы поймете, что делаете. Очевидно, делайте это только после того, как вы серьезно изучите триггеры. Проверьте MSDN тоже

1 голос
/ 20 сентября 2010

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

Прочитайте онлайн-страницу книг для Создать триггер и запишите триггерhand.

Возможно, в этом шаблоне кода больше, чем нужно на самом деле.Прочитайте руководство и сделайте его простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...