SQL Server - 从View AFTER INSERT更新基础表记录

时间:2013-12-07 20:08:33

标签: sql-server triggers calculated-columns sql-view

这是我第一次在这里问一个问题,我的问题只是在浏览时得到了很多答案 - 所以非常感谢大家,但这次我被卡住了。

我几乎是SQL的新手,所以请耐心等待我,我也在使用非我设计的SQL Server 2008 R2数据库,我只是试图从中获取数据用于其他用途,我也使用SQL Server Management工作室(SSMS)。

SETUP:有很多表,但在这种情况下,我正在使用一个主要的特定Items表和另外5个“已连接”表以及从这些表创建的视图。然后我在MS Access中使用我更熟悉的视图,我在主表中添加了一些新列,其中一个我想存储基于特定MachineRate的计算Item主表(相同记录)和其他表的值。我能够在视图中做到这一切。

但我的问题是:是否可以将此计算值用作主表的默认值或使用触发器触发?

我已经尝试了函数和触发器,并开始怀疑这是否不起作用,并且如上所述,视图基于我想要将值插入的表。

对于ex(这只是部分):主表有以下列...

RecID, PartRef, Material, Width, Length, Thickness, MachRate etc

MachineRate

RecID, Rate

TableOfTech

RecID, Material, Thickness1, Thickness2, AddToMachRate  etc...

我的计算值需要5个表中的3个,主表的MachRate值需要(来自TableOfTech的MachineRate + AddToMachRate),其中TableOfTech.Material = MainTable.Material和MainTable.Thickness TableOfTech 。厚度1和厚度2

不确定ex:真的有多大帮助,但是为了让你了解我正在使用的内容,所以它是否真的能够插入到只有插入的新记录的表列中...一个基于的值来自SAME表的视图?

我更好地解释了为什么我要这样做....在这种情况下,用户必须能够更改该值,但大多数情况下默认值都可以,我们正在使用它那一刻

我希望这对你们有意义,我期待着任何帮助!

S上。布鲁贝克

1 个答案:

答案 0 :(得分:0)

在表中有计算列的情况下,最好保留在同一个表中为此计算列计算值的所有列。

您可以从其他表的列计算计算列whos值,但是您必须在计算值的所有表上创建INSTEAD OF INSERT triggers, AFTER UPDATE, AFTER DELETE触发器,以同步计算列中的任何更改源表,可能是一个任务的地狱,触发器有时可能是沉默的杀手。

所以为了避免所有这些麻烦,只需保留计算值的列和计算列在一个表中的自我。

另一个更简单的选项是创建另一个view,它在运行时从这些多个基础表中收集数据,并在运行时为您计算它们。由于您已经在数据库中拥有了计算此列的数据,因此只有在您希望查看计算结果时才能在运行时计算它们。

如果基础表中有大量数据并在运行时计算它们需要花费大量时间,那么请考虑INDEXED VIEWS

我的建议是尽可能避免出现多个表中有计算列和源列的情况。