您的位置:首页 > 其它

触发器在业务数据处理中的应用

2014-08-07 16:55 141 查看
  从ampla系统读取大量的数据,储存在SQL Server数据库表TrainingData中:

表TrainingData

  因为业务的需要,我们需要建立一个“元数据”表Variables,用以检索表中数据。需要amplaLocation,productType,.testItem三个字段组合成为一个key,这个key我把它定义为“检验项”。检验项即是表TrainingData这三个字段的所有可能的组合,这些信息被储存在表Variables,就构成了元数据表。

  虽然名为元数据表,但表Variables中的数据是没法预制的。因为TrainingData的数据是不定时地读取自别的数据库系统,是不断在变化的,而表Variables的数据是需要跟随着TrainingData的数据变化在变化,实际上,前者是后者的一个动态的检索目录一样。

  当然不是完全没法预制。既然是业务上的数据,当然可以把amplaLocation,productType,.testItem的所有组合都预先储存在表Variables不就解决了吗?是的,而且amplaLocation,productType,.testItem这三个字段的值,肯定也是可枚举,且不会经常变化的。但是这里需要考虑的是,如此一来,表Variables就需要人来维护,就算我们已有的软件模块可以满足使得用户在前台维护此表,但对于用户来说,也是一个不小的工作量,而且如果一旦用户维护表中数据有错误,作为元数据表(这里表达的意思是,在程序中会使用此表,检索数据),那么对我们程序的影响也是颇大的。

  所以,自然地就使用触发器,表TrainingData的数据发生变化,自动更新表Variables。之前只模糊地知道触发器的作用,但从未使用过。

  触发器脚本:

ALTER TRIGGER updateVariables
ON TrainingData
AFTER INSERT
AS
DELETE FROM Variables
INSERT INTO Variables(Variables.amplaLocation,Variables.productType,Variables.testItem) SELECT DISTINCT TrainingData.amplaLocation,TrainingData.productName,TrainingData.testItem FROM TrainingData
GO
   
  (8月10日)但是,这个由触发器里面语句所插入数据的表Variables要由用户维护进去一些其他数据。所以,上面触发器里面的sql语句,DELETE是不对的。它删除所有之前的数据,包括用户自己维护到此表的数据。如何处理这种情况呢?




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: