求助:这语句为什么无法更新数据库删除记录语句记录

创建一个虚拟表,该表以另一种方式表示一个或多个表中的数据。CREATE VIEW 必须是查询批处理中的第一条语句。

是视图的名称。视图名称必须符合标识符规则。可以选择是否指定视图所有者名称。

是视图中的列名。只有在下列情况下,才必须命名 CREATE VIEW 中的列:当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为联接),视图中的某列被赋予了不同于派生来源列的名称。还可以在 SELECT 语句中指派列名。

如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。

title_id 的视图上的权限相同。

是表示可以指定多列的占位符。

是定义视图的 SELECT 语句。该语句可以使用多个表或其它视图。若要从创建视图的 SELECT 子句所引用的对象中选择,必须具有适当的权限。

视图不必是具体某个表的行和列的简单子集。可以用具有任意复杂性的 SELECT 子句,使用多个表或其它视图来创建视图。

在索引视图定义中,SELECT 语句必须是单个表的语句或带有可选聚合的多表 JOIN。

对于视图定义中的 SELECT 子句有几个限制。CREATE VIEW 语句不能:

强制视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则。通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到修改的数据。

一般情况下,如果视图为下列格式,则称其为分区视图:

    • 成员表中的所有列应在视图定义的列列表中被选定。
    • 每个 select_list 中的同一序号位置上的列应属于同一类型,包括排序规则。列仅仅属于隐性可转换类型(如 UNION 的通常情况下)是不够的。

      必须以下面的格式在表 T1 上定义约束 C1:

    • 约束应使 <col> 的任何给定值都能满足约束 C1,...,Cnat most one,这样,约束应形成一套不连接的或非重叠的间隔。定义不连接的约束的列 <col> 称为"分区列"。请注意分区列在基础表中可能有不同的名称。约束应处于"已启用"状态,以使它们满足分区列的上述条件。如果禁用了约束,则请使用 ALTER

      下面是有效约束集的示例:

    • 在 SELECT 列表中不能多次使用同一列。
    • 如果成员表中的同一列上存在多个约束,则 SQL Server 忽略所有约束且在确定视图是否为分区视图时不考虑这些约束。为满足分区视图的条件,在分区列上应只有一个分区约束。
  1. 成员表(或基础表 T1,...,Tn
    • 表可以是本地表,也可以是通过由四部分构成的名称或基于 OPENDATASOURCE 或 OPENROWSET 的名称引用的其它 SQL Server 中的表。(OPENDATASOURCE 和 OPENROWSET 语法可以指定表名,但不能指定直接传递查询。)有关更多信息,请参见

      如果一个或多个成员表是远程表,则视图称为 distributed partitioned view,并且适用附加条件。本节稍后将对其进行讨论。

    • 在用 UNION ALL 语句组合的表集中,同一个表不能出现两次。
    • 成员表不能在表中的计算列上创建索引。
    • 成员表在数目相同的列上应具有所有 PRIMARY KEY 约束。

只有 SQL Server 2000 开发版和企业版允许在分区视图中进行 INSERT、UPDATE 和 DELETE 操作。若要修改分区视图,语句必须满足下列条件:

  • INSERT 语句必须为视图中所有的列提供值,即使基础成员表具有这些列的 DEFAULT 约束或即使它们允许 NULL。对于这些具有 DEFAULT 定义的成员表列,这些语句无法显式地使用关键字 DEFAULT。
  • 插入到分区列中的值应至少满足一个基础约束;否则,INSERT 操作将因违反约束而失败。
  • 即使列中含有在相应成员表中定义的 DEFAULT 值,UPDATE 语句也不能指定 DEFAULT 关键字作为 SET 子句中的值。
  • 不能通过 INSERT 或 UPDATE 语句修改视图中作为一个或多个成员表中的 IDENTITY 列的列。
  • 如果分区视图或针对该视图的 INSERT、UPDATE 和 DELETE语句中的任何一个成员表具有内联接,则不允许使用这些语句。

分布式分区视图的附加条件

对于分布式分区视图(当一个或多个成员表为远程表时),适用下列附加条件:

  • 将启动分布式事务以确保更新所影响的所有节点间的原子性。
  • 分区视图中的任何链接服务器都不能是环回链接服务器(指向同一 SQL Server 的链接服务器)。

当设置好成员表和分区视图的定义后,Microsoft SQL Server 2000 将生成智能的查询计划以便有效地访问成员表中的数据。通过使用 CHECK 约束定义,查询处理器在成员间映射键值的分布。当用户发出查询时,查询处理器将映射与 WHERE 子句中指定的值进行比较,然后生成使成员服务器间的数据传输量减到最少的执行计划。因此,虽然有些成员表可能位于远程服务器中,但是 SQL Server 2000 将解析分布式查询,使得必须传输的分布式数据量减到最少。有关 SQL Server 2000 如何解析分区视图查询的更多信息,请参见。

为在复制所包含的成员表上创建分区视图,需要考虑下列事项:

  • 如果在更新订阅服务器时基础表包含在合并复制或事务复制中,则唯一标识符列也应包含在 SELECT 列表中。
  • 对分区视图进行的任何 INSERT 操作都必须对唯一标识符列提供 NEWID() 值。对唯一标识符列的任何 UPDATE 操作都必须提供 NEWID() 作为该值,因为无法使用 DEFAULT 关键字。
  • 通过视图对更新所做的复制与在两个不同的数据库之间复制表时完全相同;也就是说,这些表服务于不同的复制代理程序,而且不保证更新的顺序。

若要创建视图,用户必须具有 CREATE VIEW 权限,还必须在视图所引用的表、视图和表值函数上具有 SELECT 权限,在视图所唤醒调用的标量值函数上具有 EXECUTE 权限。

另外,若要创建 WITH SCHEMABINDING 视图,用户必须在每个引用的表、视图和用户定义函数上具有 REFERENCES 权限。

下例创建具有简单 SELECT 语句的视图。当需要频繁地查询列的某种组合时,简单视图非常有用。

下例使用 WITH ENCRYPTION 选项并显示计算列、重命名列以及多列。

下面是用来检索加密存储过程的标识号和文本的查询:

说明  text 列的输出显示在单独一行中。执行该存储过程时,下列信息将与 id 列信息出现在同一行中。

下例显示名为 CAonly 的视图,该视图使得只对加利福尼亚州的作者应用数据修改。

D. 在视图中使用内置函数

下例显示包含内置函数的视图定义。使用函数时,必须在 CREATE VIEW 语句中为派生列指定列名。

下例使用 @@ROWCOUNT 函数作为视图定义的一部分。

下例使用名为 SUPPLY1SUPPLY2SUPPLY3SUPPLY4 的表,这些表对应于位于不同国家的四个办事处的供应商表。

}

我要回帖

更多关于 数据库删除记录语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信