Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL视图与Microsoft Access查询_Sql_Ms Access_View - Fatal编程技术网

SQL视图与Microsoft Access查询

SQL视图与Microsoft Access查询,sql,ms-access,view,Sql,Ms Access,View,虽然大多数SQL数据库允许您创建视图,但Microsoft Access已保存查询。我曾读到Access查询与SQL视图不同,但这是一个笼统的说法 我知道他们在细节上有些不同。例如,Access按原样保存选择*,而大多数保存的视图都会显示字段列表 除了这些细节之外,两者之间还有根本区别吗 谢谢从广义上讲,视图提供: 演出 受益于执行计划,在非索引视图的情况下,执行计划将使用视图和构成视图定义的查询分析查询。然后存储这些计划,以便重复和/或类似查询可以更快地检索数据。供参考: 用于以下情况的索

虽然大多数SQL数据库允许您创建视图,但Microsoft Access已保存查询。我曾读到Access查询与SQL视图不同,但这是一个笼统的说法

我知道他们在细节上有些不同。例如,Access按原样保存
选择*
,而大多数保存的视图都会显示字段列表

除了这些细节之外,两者之间还有根本区别吗


谢谢

从广义上讲,视图提供:

  • 演出

    • 受益于执行计划,在非索引视图的情况下,执行计划将使用视图和构成视图定义的查询分析查询。然后存储这些计划,以便重复和/或类似查询可以更快地检索数据。供参考:
    • 用于以下情况的索引视图:底层表不是非常事务性的(OLTP),数据集很大,需要聚合,例如在OLAP源中。供参考:
  • 保安

    • 允许您在不授予对构成视图的基本视图或表的访问权限的情况下显示数据子集
  • 更容易部署
    • 使用Access,您可以更改保存的查询,您很可能必须向所有用户推出Access数据库。对于视图,您进行了更改,这将影响所有用户
关于最后一点,假设您没有更改视图中其他地方引用的标识符。一个简单的例子是更改视图中的列名。这很可能需要在其他依赖数据库对象或访问它的外部工具中更改名称

我知道他们在细节上有些不同。例如,Access会按原样保存SELECT*,而大多数保存的视图都会显示字段列表


严格说来,这不是真的。通常最好在视图中按名称标识列,因为它们表示数据的子集,并且限制了最终用户看到的数据。也就是说,一般来说,任何SQL查询都可以明显地限制包含的列,无论它是否是Access查询。但是您仍然会遇到带有
SELECT*
的视图,因此本质上没有区别。

从广义上讲,视图提供:

  • 演出

    • 受益于执行计划,在非索引视图的情况下,执行计划将使用视图和构成视图定义的查询分析查询。然后存储这些计划,以便重复和/或类似查询可以更快地检索数据。供参考:
    • 用于以下情况的索引视图:底层表不是非常事务性的(OLTP),数据集很大,需要聚合,例如在OLAP源中。供参考:
  • 保安

    • 允许您在不授予对构成视图的基本视图或表的访问权限的情况下显示数据子集
  • 更容易部署
    • 使用Access,您可以更改保存的查询,您很可能必须向所有用户推出Access数据库。对于视图,您进行了更改,这将影响所有用户
关于最后一点,假设您没有更改视图中其他地方引用的标识符。一个简单的例子是更改视图中的列名。这很可能需要在其他依赖数据库对象或访问它的外部工具中更改名称

我知道他们在细节上有些不同。例如,Access会按原样保存SELECT*,而大多数保存的视图都会显示字段列表

严格说来,这不是真的。通常最好在视图中按名称标识列,因为它们表示数据的子集,并且限制了最终用户看到的数据。也就是说,一般来说,任何SQL查询都可以明显地限制包含的列,无论它是否是Access查询。但是您仍然会遇到使用
SELECT*
的视图,因此这本身并没有什么区别。

访问“保存的查询”不仅仅是SQL Server中的视图(其中“更多”并不意味着它更好或不更好)。在SQLServer中,您有定义视图的SQL文本和执行计划。您还可以添加其他信息,如描述文本或具有用户定义值的用户定义变量,这些值对视图本身没有影响

在Access中,您使用QueryDef对象(实际上是“保存的查询”),它们包含的不仅仅是SQL文本,而SQL文本只是QueryDef对象的一个属性。例如,可以使用parameters子句定义参数,该子句的使用方式与SQL Server存储过程/函数中的@-变量类似。这对于SQL Server视图来说是不存在的。当然,QueryDef对象也有一个保存的执行计划,这就是为什么Microsoft还建议将QueryDef用作表单记录源,而不是在同一位置使用动态SQL命令。JET/ACE查询优化器的结果也可以通过一些注册表技巧显示出来,因为它不是Access GUI的一部分,所以大多数人不知道它还有一个执行计划。 QueryDef对象还包含格式属性、要在数据表视图中显示的标题、组合框查找的定义、ODBC连接字符串等,您可以在Access帮助中找到它们

因此Access QueryDefs包含很多内容,这些内容只会影响结果的显示,这对于使用Access开发的前端来说是有意义的,但与SQL Server视图相比,它们没有太多优势。一个简单的区别是SQL语言:独立于您使用的后端,您正在使用Access SQL,而此SQL实际上是一个非常基本的SQL。例如,SQL Server上的T-SQL是一种非常强大的SQL语言,您可以在其中执行更多操作—例如,您可以查询层次结构的SQL