使用触发器更改插入/更新的数据以强制执行业务规则

时间:2014-02-18 14:40:05

标签: sql-server tsql triggers

我刚创建了一个触发器(AFTER INSERT,UPDATE),用于从日期字段中删除时间。我只是认为触发器比在插入/更新表的应用程序中修复它更容易实现。后者将涉及重新编译,并将应用程序中的人员踢出更新。

但是说实话,我不确定自己是懒惰还是聪明。

CREATE TRIGGER [dbo].[StripCastDateTime] ON [dbo].[PileInventory]
    AFTER INSERT, UPDATE
AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
       SET NOCOUNT ON;

       UPDATE PileInventory
          SET CastDate = 
                     cast(CONVERT(varchar(11), Inserted.CastDate, 101) AS datetime)
          FROM INSERTED 
          INNER JOIN [dbo].[PileInventory] AS PI
          ON     [PI].[JobNumber] = INSERTED.JobNumber
             AND [PI].[MarkNumber] = INSERTED.MarkNumber
          WHERE NOT Inserted.CastDate IS NULL 


    END

GO

它完美无缺,但这是否恰当地使用了触发器?

感谢。

马歇尔

2 个答案:

答案 0 :(得分:1)

如果更新的表格很大,那么这会损害您的数据库。我会使用触发器“INSTEAD OF INSERT”来更改数据,然后插入它。在数据库中进行此操作后没有意义。

除此之外..它是触发器的有效用法。

在这里阅读更多内容:     http://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx

答案 1 :(得分:0)

我可以在业务层中放置业务规则。懒惰的人需要工作两次,这是一个旧的说,如果你可以在维护窗口中踢人应用程序。如果你做了很多触发可能会减慢你的应用程序的插入,那么触发器也会很快变得复杂并增加一些维护痛苦。