2011-04-18 125 views
14

我最近与我一起工作的一位同事告诉我,SQL Express和MS Access本质上是一回事;这似乎不是一个准确的说法。我知道你可以将Access转换为一个SQL数据库,并且可能在它们类似的地方,但我会认为SQL数据库引擎和用于运行访问的内容并不相同。不仅如此,但SQL语句的语法等我知道是不一样的。SQL Server Express vs MS Access

我主要想了解让我更多地了解该版本。

回答

38

恩,不,不一样。

首先,我需要澄清一些术语。 MS Access是一款快速应用程序开发(RAD)工具,可让您快速构建与关系数据绑定的表单和报表。它带有一个基于文件的数据库引擎(Jet/ACE)。

访问RAD工具可以与许多不同的后端数据库(喷气时,SQL Server,任何支持ODBC数据库等)一起使用。我必须假设你的同事特别评论了Jet/ACE,即MS Access使用的数据库引擎。

我觉得Jet/ACE database engineMS SQL Server Express之间的一个最大区别是,喷气/ ACE是基于文件的SQL Server Express的使用客户端/服务器模式。这意味着SQL Server Express需要一个正在运行的服务来提供对数据存储的访问。这可能会使某些情况下的部署复杂化。

SQL Server Express实际上只是SQL Server的限制版本:最大数据库大小为4GB(2008R2为10GB),仅使用单个物理CPU等。这些限制是为了防止大型组织使用免费提供的Express版本代替完整的SQL Server安装。结果是SQL Server Express为SQL Server提供了一个真正无缝升级的途径。这也是(一般来说)一个更强大和功能齐全的数据库管理系统,然后Jet/ACE。

相似

  • 关系数据库管理系统
  • 写入由Microsoft

差异

  • 的MS Access
    • 基于文件的
    • 免费分发的运行时(2007或更高版本)
    • RAD工具(表单/报表设计器)
    • 使用Jet SQL
    • 最大文件大小2GB
  • SQL Server Express的
    • 客户机/服务器型号
    • 免费
    • 没有RAD工具
    • 使用的Transact-SQL
    • 最大数据库大小4GB(10GB为SSE ​​R2),最大一个物理CPU
+3

值得注意的是,SQL Server允许你创建触发器和存储过程,而Jet/ACE则不能。虽然可以使用ADO(ActiveX数据对象)在VBA代码中对它们进行操作,但MS Access(作为RAD工具)并非真正用于编辑或执行存储过程。 – HK1 2011-04-19 18:16:09

+1

尽管我没有机会使用它们,但Access 2010引入了“[数据宏](http://blogs.office.com/b/microsoft-access/archive/2009/08/13/access-2010 -data-macros-similar-to-triggers.aspx)“,它们与SQL Server中的触发器类似。 – mwolfe02 2011-04-19 20:47:55

+0

实际上,表级数据宏与触发器并不相似,但它们可以用来实现与触发器相同的操作。它们也可以用于其他目的。 – 2011-04-26 02:57:22

1

我想你的同事想到的是SQL Server CE,这是一个超轻量级的嵌入式数据库,在数据库管理方面它仍然(IMO)远远优于Access。 SQL Express甚至不能与Access进行比较而不会冒犯前者。

+0

那么,SQL服务器的精简版没有存储过程或表触发器,而默认的Access数据引擎现在可以。因此,并不是一个满贯的扣篮,因此像服务器数据引擎(ACE)这样的进程内数据引擎的紧凑版sql服务器也不是一种服务,因此需要辩论。 – 2011-04-19 08:05:22

+0

或者SQLite vs Access – skan 2013-09-13 17:02:33

0

这里有两种产品数据表,所以你可以看到在两个数据库之间的差别一些确凿的事实。

访问: http://office.microsoft.com/en-us/access-help/access-specifications-HP005186808.aspx

SQL(特快列在最右列): http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx

的评论我一直读的是Access是伟大的单用户单次访问的数据库使用过程中,一分钟你的规模超出了单一的用户看别处。尽管这可能是一个“小小”,但Access在多用户环境中确实不太好。根据经验,我们有一位客户忽略并忽略了将后端数据库从Access迁移到SQL的请求,并且有很多场合我们不得不从备份进行恢复,或者由于损坏使Access数据库脱机。

他们是两个不同的目标市场,两种完全不同的技术。数据库引擎确实不同,正如您提到的T-SQL与Access SQL不同。

你可以在“扩展”的Access数据库通过创建SSIS包或其他工具进行导入到SQL,但是这需要访问架构和数据,并将其迁移到真正的SQL数据库。它不仅仅是附加Access数据库等。

任何时候你需要一个“真正”的数据库中,我会强烈建议在寻找任何可用在访问SQL版本。

+3

Access/Jet/ACE无法处理多个用户的想法是可笑的。我所有使用Jet/ACE后端的客户都有多个用户同时访问数据存储。如果您的应用程序不适用于多个用户,那么它就是您的错误,而不是Access的。 – 2011-04-26 02:58:53

+3

并失去“'真正'数据库'的术语。它使你看起来像一个无知的反访问偏执。 – 2011-04-26 02:59:22

0

只要记住,与MS-访问你不如果您正确玩牌,则会有尺寸限制。例如,没有理由不在每个数据库中包含许多2到4千兆字节的表。您的ODBC应用程序可以打开到多个MS-Access数据库的连接,并查询每个数据库中的单个表。因此,您可以拥有一个包含数万亿记录的数据库,存储在多个MDB文件中。我去过的一家公司使用单一的MS-Access数据库来运行在MS-Access表单中完成的问题跟踪系统。他们一次只能使用一个人,因为共享问题会导致MS-Access锁定。我在数据库中编写了一个Win32 Perl本地Windows GUI用户界面,这个界面在字段/记录验证方面更好,而且我的ODBC代码能够管理用于同时用户访问的连接。我通过我的Perl程序为每个用户管理数据库的开放和读写。我没有打开数据库。我没有为每个用户维护一个持久连接,而只是保持足够长的连接来检索记录以进行编辑。然后我关闭连接,直到将记录写回数据库。另外,我通过维护包含用户当前正在编辑的记录的记录标识的用户登录表来编写自己的记录锁定程序逻辑,然后在不再编辑该记录时删除该记录。当另一个用户去编辑相同的记录时,程序检查该记录是否当前打开供其他用户编辑。该系统完美无瑕。 MS-Access从未锁定通过ODBC和多用户访问。我甚至在编译好的Perl程序中将密码嵌入到数据库中,以便除了通过Perl程序以外,没有人能够访问Access数据库中的数据。