View 在vbnet 2010中使用tableadapter更新sql视图

View 在vbnet 2010中使用tableadapter更新sql视图,view,vb.net-2010,tableadapter,View,Vb.net 2010,Tableadapter,我有一个表适配器,其中填充了一个简单的:SELECT*FROM[view] 我尝试更新表适配器或添加新行,但什么也没有发生。我有很多表适配器,但都被一个表填充,所以更新不是问题。但是现在使用视图来获取数据,我无法进行更新/插入 有什么想法吗?如果视图是在多个表上创建的,或者具有聚合函数,或者具有order by子句或union子句,则表示该视图是不可更新的视图。它不支持在此视图上插入/删除/更新 视图中有两个表之间的联接,所以它是不可更新的视图。仅当视图仅在单个表上创建时才可更新 只要满足以下条

我有一个表适配器,其中填充了一个简单的:SELECT*FROM[view]

我尝试更新表适配器或添加新行,但什么也没有发生。我有很多表适配器,但都被一个表填充,所以更新不是问题。但是现在使用视图来获取数据,我无法进行更新/插入


有什么想法吗?

如果视图是在多个表上创建的,或者具有聚合函数,或者具有order by子句或union子句,则表示该视图是不可更新的视图。它不支持在此视图上插入/删除/更新

视图中有两个表之间的联接,所以它是不可更新的视图。仅当视图仅在单个表上创建时才可更新

只要满足以下条件,就可以通过视图修改基础基表的数据:

任何修改,包括UPDATE、INSERT和DELETE语句,都必须只引用一个基表中的列。 视图中正在修改的列必须直接引用表列中的基础数据。列不能以任何其他方式派生,例如通过以下方式:

  • 聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR和VARP
  • 计算。无法从使用其他列的表达式计算该列。使用集合运算符UNION、UNION ALL、CROSJOIN、EXCEPT和INTERSECT形成的列相当于一次计算,并且也不可更新
正在修改的列不受GROUPBY、HAVING或DISTINCT子句的影响。 TOP不与with CHECK OPTION子句一起在视图的select_语句中的任何位置使用

前面的限制适用于视图的FROM子句中的任何子查询,就像它们适用于视图本身一样。通常,数据库引擎必须能够明确地跟踪从视图定义到一个基表的修改。有关详细信息,请参见通过视图修改数据

如果前面的限制阻止您直接通过视图修改数据,请考虑以下选项:

而不是触发器

可以在视图上创建替代触发器,以使视图可更新。执行INSTEAD OF触发器,而不是定义触发器的数据修改语句。此触发器允许用户指定处理数据修改语句时必须执行的操作集。因此,如果特定数据修改语句(INSERT、UPDATE或DELETE)上的视图存在INSTEAD OF触发器,则相应的视图可以通过该语句进行更新

分区视图

如果视图是分区视图,则该视图是可更新的,受某些限制。当需要时,数据库引擎将本地分区视图区分为所有参与表和视图位于同一SQL Server实例上的视图,将分布式分区视图区分为视图中至少一个表位于不同服务器或远程服务器上的视图


如果视图是在多个表上创建的,或者具有聚合函数,或者具有order by子句或union子句,则表示该视图是不可更新的视图。它不支持在此视图上插入/删除/更新

视图中有两个表之间的联接,所以它是不可更新的视图。仅当视图仅在单个表上创建时才可更新

只要满足以下条件,就可以通过视图修改基础基表的数据:

任何修改,包括UPDATE、INSERT和DELETE语句,都必须只引用一个基表中的列。 视图中正在修改的列必须直接引用表列中的基础数据。列不能以任何其他方式派生,例如通过以下方式:

  • 聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR和VARP
  • 计算。无法从使用其他列的表达式计算该列。使用集合运算符UNION、UNION ALL、CROSJOIN、EXCEPT和INTERSECT形成的列相当于一次计算,并且也不可更新
正在修改的列不受GROUPBY、HAVING或DISTINCT子句的影响。 TOP不与with CHECK OPTION子句一起在视图的select_语句中的任何位置使用

前面的限制适用于视图的FROM子句中的任何子查询,就像它们适用于视图本身一样。通常,数据库引擎必须能够明确地跟踪从视图定义到一个基表的修改。有关详细信息,请参见通过视图修改数据

如果前面的限制阻止您直接通过视图修改数据,请考虑以下选项:

而不是触发器

可以在视图上创建替代触发器,以使视图可更新。执行INSTEAD OF触发器,而不是定义触发器的数据修改语句。此触发器允许用户指定处理数据修改语句时必须执行的操作集。因此,如果特定数据修改语句(INSERT、UPDATE或DELETE)上的视图存在INSTEAD OF触发器,则相应的视图可以通过该语句进行更新

分区视图

如果视图是分区视图,则该视图是可更新的,受某些限制。当需要时,数据库引擎将本地分区视图区分为所有参与表和视图位于同一SQL Server实例上的视图,将分布式分区视图区分为视图中至少一个表位于不同服务器或远程服务器上的视图


谢谢Romil,在提出问题之前,我已经检查了这些限制。我的看法