2011-09-27 76 views
-2

我想在该视图中创建视图我想插入记录或基于特定条件更新记录,因此我们可以在SQL视图中插入或更新。我们可以在视图中插入或更新语句吗?SQL视图中的DML语句

+1

您似乎已经忘记提问... –

+0

我的问题是我们可以插入或更新声明 –

+0

您使用的是什么RDMS? – mwan

回答

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.计算;该列不能使用其他列的表达式进行计算。使用集合运算符(UNION,UNION ALL,CROSSJOIN,EXCEPT和INTERSECT)形成的列相当于一个计算,并且也不可更新。

被修改的列不能被GROUP BY,HAVING或DISTINCT子句影响。

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

的sooo ...如果它是一个相对简单的insertupdate你想实现的话,那是非常可能的 - 但更复杂的查询(和视图),则越难。

如果可以的话,我还会提供一些反对的建议 - 在我看来,它增加了一层不必要的复杂性,并且(作为必须解开其他使用此过程的查询的人员),真的很痛苦保持。

+0

“我的问题是我们可以在视图中插入或更新语句”。正确的答案是否定的!您正在回答有关插入或更新语句是否可以将视图作为目标的不同问题。 –

0

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

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

它强制执行,该定义必须是SELECT声明。