在插入时查看级联然后转储到表/ VIEW而不是触发然后转储到表?

时间:2011-07-14 12:59:45

标签: sql tsql view triggers

我想将视图数据转储到一个表中。我有一个VIEW可以执行很多case / algorithms /这样的事情:(不要关心这段代码......)

    select  c1.a as car, c1.b as boat, c1.c as tree    convert(char(1),
 dbo.aa(l1+l12+l314)) as something1,    convert(varchar(9), dbo.bb(l1+l1+l13+l14, 2)) 
as something2,   bo.bb(l1+l12+l13+l14, 3) as something3,    convert(char(1),
 dbo.aa(l1+l1+l1+l14)) as something4, case when dbo.aa(l1+l12+l13+l14, 2) like 
'ttt'  then convert(varchar(20), bb(l1+l12+l13+l14, 5))     
 else null ............... etc..

在插入时,我希望将此VIEW的数据转储到表中。

创建此视图时,我是否在插入时硬编码级联?

我是否在insert上创建了一个而不是触发器来转储到表?

无论哪种方式,我将如何编码?

1 个答案:

答案 0 :(得分:1)

不要通过视图插入。如果视图中包含复杂的逻辑,则可能不可能映射回基础表,并且可能无法插入。

例如,使用您的示例:如果视图已更新为something1字段的值不同,那么如何将此值解构为l1的正确基础值, l12l314

请改用存储过程并确保应用程序使用该存储过程,并且不会尝试更新视图。

您可以在所有基础表上创建触发器,这些表将查询视图并更新您想要的额外表中的数据,但这似乎打败了视图点。