我应该使用MS SQL Management Studio中的模板来创建新的触发器吗?

l--*_*''' 2 sql sql-server triggers

如果使用GUI在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
Run Code Online (Sandbox Code Playgroud)

我应该使用这个模板吗?

我对触发器一无所知,但我认为我需要使用它们.在这种情况下的目的是在表的插入,我需要更新其中一个字段.

请帮我一下!

HLG*_*GEM 5

如果你想要一个普通的触发器来触发对表本身进行结构改变,那么开始时这是错误的模板.

如果您决定执行影响数据的触发器(而不是结构),则需要了解一些事项.首先,到目前为止,最关键的触发器对数据集进行操作,而不是每行一行.您必须编写任何触发器来处理多行inserts.updates或deletes.如果您最终将任何代码设置为插入或删除的值到变量,如果涉及多个记录,则有99%的可能无法正常工作.

你问的插入或删除了什么?这是您需要了解的关于触发器的下一件事,有两个伪节点(插入和删除)仅在触发器(或输出子句)中可用,其中包含要插入的新信息或更新的值(在插入的表中) )和更新删除或更改旧信息(在已删除的表中).因此,插入的值包含插入值,删除值包含已删除值,更新值包含值.在触发器中使用这些来提取您需要更改的值.