SQL视图中的DML语句

时间:2011-09-27 04:51:30

标签: sql-server sql-server-2005 views

我试图在该视图中创建一个视图我想根据特定条件插入记录或更新记录,因此我们可以在SQL视图中插入或更新。我们可以在视图中插入或更新语句吗?

2 个答案:

答案 0 :(得分:1)

简短回答:是的。但是有限制。

例如:(取自http://msdn.microsoft.com/en-us/library/ms180800(v=sql.90).aspx

任何修改(包括UPDATE,INSERT和DELETE语句)都必须仅引用一个基表中的列。

视图中要修改的列必须直接引用表列中的基础数据。它们不能以任何其他方式派生,例如通过:

  1. 聚合函数(AVG,COUNT,SUM,MIN,MAX,GROUPING,STDEV,STDEVP,VAR和VARP)。 2.计算;无法使用其他列从表达式计算列。使用set运算符(UNION,UNION ALL,CROSSJOIN,EXCEPT和INTERSECT)形成的列相当于计算,也不可更新。
  2. 正在修改的列不受GROUP BY,HAVING或DISTINCT子句的影响。

    当指定WITH CHECK OPTION时,不能在视图的select_statement中的任何位置使用TOP。

    Sooo ...... 如果它是一个相对直接的insertupdate你想要实现的话,那么它很可能 - 但是越复杂查询(和视图),它变得越困难。

    如果可以的话,我也会提出一些反对这样做的建议 - 在我看来,它增加了一个不必要的复杂层和(因为有人不得不解开其他使用这个过程的查询)这是一个真正的痛苦维护

答案 1 :(得分:0)

不,您不能在视图中使用插入或更新语句。请参阅CREATE VIEW

的文档
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

它强制定义必须是SELECT语句。