对于用于创建视图的 SELECT 语句以及能否在视图中插入数据、从视图中删除数据或更新视图,都存在特定的限制。
无法在 SELECT 查询中使用 ORDER BY 子句。关系表的一个特性是行或列的顺序没有特殊意义,而使用 ORDER BY 子句将在视图的行上强加顺序。可以在视图定义中使用 GROUP BY 子句、子查询和连接。
只在顶级 SELECT 列表中支持标量值子查询(视图、派生表或子查询均不支持)。有时顶级 SELECT 的 FROM 子句中使用的视图或派生表非常简单,可以“展平”到顶级 SELECT。因此,之前的规则实际仅针对子查询、未展平的视图以及未展平的派生表强制执行。例如:
CREATE VIEW test_view AS SELECT testkey,(SELECT COUNT(*) FROM tagtests WHERE tagtests.testkey = testtrd.testkey ) FROM testtrd
SELECT * FROM test_view
Msg 21, Level 14, State 0:
SQL Anywhere Error -1005004: Subqueries are allowed only as arguments of
comparisons, IN, and EXISTS,
-- (opt_Select.cxx 2101)
要规划一个视图,可以调整 SELECT 查询本身,直到其以所需格式提供完全符合需要的结果。调整好 SELECT 语句之后,即可在查询前面添加一个短语来创建视图。例如:
CREATE VIEW AS 有些视图允许使用 UPDATE、INSERT 和 DELETE 语句,有些视图不允许,具体取决于其关联的 SELECT 语句。
无法在包含以下内容的视图中执行更新、插入或删除:
SELECT 语句中的 GROUP BY 子句
在所有这些情况中,无法将 UPDATE 、 INSERT 或 DELETE 转换成对基础表的操作。 警告请不要删除 dbo 用户 ID 拥有的视图,该用户 ID 拥有系统对象。删除此类视图或将其转化为表可能导致意外的问题。