SQL 视图中的 DML 语句
Posted
技术标签:
【中文标题】SQL 视图中的 DML 语句【英文标题】:DML statement in a SQL Views 【发布时间】:2011-09-27 04:51:30 【问题描述】:我正在尝试在该视图中创建一个视图,我想根据特定条件插入记录或更新记录,因此我们可以在 SQL 视图中插入或更新。我们可以查看插入或更新语句吗?
【问题讨论】:
你好像忘记问问题了…… 我的问题是我们可以在视图中插入或更新语句 您使用的是什么 RDMS? 然后是:msdn.microsoft.com/en-us/library/ms180800(v=sql.90).aspx 我不明白您为什么要为此使用View
。这完全是错误的机制。你需要一个程序。
【参考方案1】:
简短的回答:是的。但是有限制。
例如:(取自http://msdn.microsoft.com/en-us/library/ms180800(v=sql.90).aspx)
任何修改,包括 UPDATE、INSERT 和 DELETE 语句,都必须仅引用一个基表中的列。
视图中正在修改的列必须直接引用表列中的基础数据。它们不能以任何其他方式派生,例如通过:
-
聚合函数(AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP)。 2.计算;无法从使用其他列的表达式计算该列。使用集合运算符(UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT)形成的列相当于一次计算,也不能更新。
正在修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影响。
当还指定了 WITH CHECK OPTION 时,不能在视图的 select_statement 中的任何地方使用 TOP。
Sooo... 如果它是一个相对简单的 insert
或 update
你试图实现,那么它是很有可能的 - 但查询越复杂(和视图),它变得越困难。
如果可以的话,我还建议不要这样做 - 我认为这会增加不必要的复杂性,并且(作为不得不解开使用此过程的其他查询的人)维护起来真的很痛苦.
【讨论】:
“我的问题是我们可以在视图中插入或更新语句”。正确答案是否定的!您正在回答一个不同的问题,即插入或更新语句是否可以将视图作为目标。【参考方案2】:不,您不能在视图中包含插入或更新语句。请参阅CREATE VIEW
的文档
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ] [ ; ]
它强制定义必须是SELECT
语句。
【讨论】:
以上是关于SQL 视图中的 DML 语句的主要内容,如果未能解决你的问题,请参考以下文章