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... 如果它是一个相对简单的 insertupdate 你试图实现,那么它是很有可能的 - 但查询越复杂(和视图),它变得越困难。

如果可以的话,我还建议不要这样做 - 我认为这会增加不必要的复杂性,并且(作为不得不解开使用此过程的其他查询的人)维护起来真的很痛苦.

【讨论】:

“我的问题是我们可以在视图中插入或更新语句”。正确答案是否定的!您正在回答一个不同的问题,即插入或更新语句是否可以将视图作为目标。【参考方案2】:

不,您不能在视图中包含插入或更新语句。请参阅CREATE VIEW的文档

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

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

【讨论】:

以上是关于SQL 视图中的 DML 语句的主要内容,如果未能解决你的问题,请参考以下文章

sql语句联合查询 与 视图想比较的话,那个效率快,为啥。

什么是DQL,DML,DDL,DCL

数据操作语句(DML)

MySQL入门

oracle数据库基本操作

审核日志未为 Cloud-SQL 生成 DML 语句日志