Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 插入时的视图级联,然后转储到表/视图,而不是触发器,然后转储到表?_Sql_Tsql_View_Triggers - Fatal编程技术网

Sql 插入时的视图级联,然后转储到表/视图,而不是触发器,然后转储到表?

Sql 插入时的视图级联,然后转储到表/视图,而不是触发器,然后转储到表?,sql,tsql,view,triggers,Sql,Tsql,View,Triggers,我想将视图数据转储到一个表中。我有一个视图,它可以执行很多case/算法/类似于这样的操作:(暂时不要关心这段代码…) 在插入时,我希望将此视图的数据转储到表中 创建此视图时,是否在插入时硬编码级联或 我是否在insert上创建一个instead of触发器以转储到表中 无论哪种方式,我将如何编码?不要通过视图插入。如果视图中包含复杂的逻辑,则可能无法映射回基础表,也可能无法进行插入 例如,使用您的示例:如果更新视图以使something1字段具有不同的值,如何将此值反构造为l1、l12和l31

我想将视图数据转储到一个表中。我有一个视图,它可以执行很多case/算法/类似于这样的操作:(暂时不要关心这段代码…)

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

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

我是否在insert上创建一个instead of触发器以转储到表中


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

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

例如,使用您的示例:如果更新视图以使
something1
字段具有不同的值,如何将此值反构造为
l1
l12
l314
的正确基础值

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


您可以在所有基础表上创建触发器,以查询视图并更新所需额外表中的数据,尽管这似乎违背了视图的观点。

@user719825-不会。您需要对应用程序进行结构化,以便使用SP进行插入而不是视图。要对应用程序进行结构化,您指的是作业?或者通过trigger?@user719825使Sp运行-我的意思是在应用程序代码中,在您的数据访问中。您无法更新此复杂视图,也无法期望在基础表中得到正确的结果。我理解您的意思,但我唯一关心的是何时执行SP?视图会自动更新。每次在其中一个下划线表(创建视图的表)中创建记录时,都必须执行SP。视图如何自行更新???必须有东西更新基础表。
    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..