我想将视图数据转储到一个表中。我有一个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上创建了一个而不是触发器来转储到表?
无论哪种方式,我将如何编码?
答案 0 :(得分:1)
不要通过视图插入。如果视图中包含复杂的逻辑,则可能不可能映射回基础表,并且可能无法插入。
例如,使用您的示例:如果视图已更新为something1
字段的值不同,那么如何将此值解构为l1
的正确基础值, l12
和l314
?
请改用存储过程并确保应用程序使用该存储过程,并且不会尝试更新视图。
您可以在所有基础表上创建触发器,这些表将查询视图并更新您想要的额外表中的数据,但这似乎打败了视图点。