我刚创建了一个触发器(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
它完美无缺,但这是否恰当地使用了触发器?
感谢。
马歇尔
答案 0 :(得分:1)
如果更新的表格很大,那么这会损害您的数据库。我会使用触发器“INSTEAD OF INSERT”来更改数据,然后插入它。在数据库中进行此操作后没有意义。
除此之外..它是触发器的有效用法。
在这里阅读更多内容: http://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx
答案 1 :(得分:0)
我可以在业务层中放置业务规则。懒惰的人需要工作两次,这是一个旧的说,如果你可以在维护窗口中踢人应用程序。如果你做了很多触发可能会减慢你的应用程序的插入,那么触发器也会很快变得复杂并增加一些维护痛苦。