【问题标题】:Should I use the template from MS SQL Management Studio to create new triggers?我应该使用 MS SQL Management Studio 中的模板来创建新触发器吗?
【发布时间】:2010-09-20 19:12:37
【问题描述】:

如果您使用 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

我应该使用这个模板吗?

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

请帮助我开始!

【问题讨论】:

  • “对触发器一无所知,但我认为我需要使用它们”引发各种警报。在确定我需要它们之前,我会推迟使用它们。 :)
  • 您能解释一下您正在更新什么类型的数据(具体示例会有所帮助)吗?数据是否基于其他字段?
  • @jenny 此答案中的评论是您认为需要触发器的原因吗? stackoverflow.com/questions/3754077/… 在这种情况下,不要 - triggers 只是一个建议,到目前为止还不是最容易实现的。
  • @Nelson:当有人添加新记录时,我需要其中一个字段的格式正确,请参阅:stackoverflow.com/questions/3754077/…

标签: sql sql-server triggers


【解决方案1】:

如果您想要一个普通的触发器,该触发器是对表本身进行结构更改的触发器,那么首先是错误的模板。

如果您决定执行影响数据(而不是结构)的触发器,则需要了解几件事。首先,也是迄今为止最关键的一点,触发器一次操作不是一行的数据集。您必须编写任何触发器来处理多行插入。更新或删除。如果您最终使用任何代码将插入或删除的值设置为变量,那么如果涉及多条记录,它有 99% 的可能性无法正常工作。

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

【讨论】:

  • +1 所有优点,尤其是关于在数据集上操作的触发器——而不是单行
【解决方案2】:

由于您对触发器一无所知,我会说不,不要使用模板。

阅读Create Trigger 的在线图书页面并手动编写触发器。

该模板代码中的内容可能比您实际需要的要多。阅读手册并保持简单。

【讨论】:

    【解决方案3】:

    如果您对触发器一无所知,那么我强烈建议您在实施它们之前阅读它们。正确使用触发器,它们可以让您的生活更轻松;弄错了,触发器会给你带来很多麻烦。

    我建议从本教程开始

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

    您可以使用上面的 SQL 作为模板,也可以简单地编写自己的。我建议你自己写,因为你会明白你在做什么。显然,只有在您认真阅读了触发器之后才这样做。也请查看MSDN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      相关资源
      最近更新 更多