MS Access 2007 查询不在 SQL Server 2008 上运行

Posted

技术标签:

【中文标题】MS Access 2007 查询不在 SQL Server 2008 上运行【英文标题】:MS Access 2007 queries does't run on SQL Server 2008 【发布时间】:2012-03-19 16:15:01 【问题描述】:

过去 4 个月,我正在 C# VS 2010 中开发一个应用程序。我使用 MS Access 2007 成功存储了近 20 个表。

今天我意识到 MS Access 2007 无法始终如一地处理我的数据库。因此我决定使用带有升迁向导的 SQL Server 2008 R2 Express,它真的很棒!

但是,当我尝试运行我已经很好开发的应用程序的各种选项时,每次向 SQL Server 发起查询时,它都会抛出错误。

我了解到,MS Access 支持的 SQL 的很多东西,MS SQL Server 都不支持

例如:使用日期查询,当我们使用“#”表示日期格式时,SQL Server 2008 将无法识别。

此外,对于 Bool 值,MS Access 将其存储为 True 和 False,而 SQL Server 使用 0。

所有这些查询都与 Access 07 完美配合

我确信必须有某种方法让 SQL Server 能够理解 MS 访问查询。

或者我必须编辑我的整个应用程序吗?就像挖矿赚金子一样。

我已使用System.Data.SqlClient 更改了所有数据访问对象,例如读取器、适配器、命令、与 SQL 数据对象的连接。

所以,这不是问题。

请尽快帮助我。

谢谢。

【问题讨论】:

SQL Server 使用 Transact SQL (T-SQL) 作为其语言 - 这与 MS Access SQL 相似,但仍有足够的不同。据我所知,没有办法让 SQL Server 运行 MS Access SQL - 你需要调整和更改你的 SQL 代码。 【参考方案1】:

您不能强制 SQL Server 运行 MS Access 查询。这些查询需要重写以使用 T-SQL 而不是 MS Access 使用的查询语言。

我感受到了你的痛苦,我只需要重写一个需要重新创建才能在 SQL Server 中使用的大型 MS Access 应用程序(超过 1k 个查询)。

有些查询可能可以直接移植,但正如您注意到的带有日期的查询,甚至一些聚合函数(First() 等)在 SQL Server 中没有使用,这些查询将需要需要改变。

这是一个链接,其中包含有关将 Access 转换为 SQL 的一些信息

Converting Access Queries to SQL Server

【讨论】:

感谢您的回答。看着你所面临的痛苦,我也鼓起勇气重写了我的查询!【参考方案2】:

您是对的,大多数时候,您不能只从 Access 中获取查询的 SQL 并在 SQL Server 中运行它。它可能适用于非常简单的查询,但通常您需要对其进行调整。

我会采取几个步骤:

    提取您的查询(我认为它们在您的代码中),然后在您的 Access 数据库中重新创建它们。确保它们像正常的 Access 查询一样在那里工作。 (例如,您可以简单地将一些代码添加到您的应用程序中以将所有查询打印到文件中,这样您就不必弄乱参数,然后只需将它们复制/粘贴到您的 Access DB 中)。 关键是要在 Access 中进行有效的查询。

    使用SSMA from Microsoft 帮助您将查询移至 SQL Server。它可以很好地将它们翻译成 T-SQL。 您可能仍然需要手动转换一些麻烦的查询,但应该不会那么多,而且通常转换并不困难。

    一旦转换为 T-SQL,只需将这些工作查询重新注入到您的代码中,或者将复杂的查询保留在 SQL Server 中作为视图(这通常更快,因为 SQL Server 已经创建了执行计划,而不是您的应用程序发送服务器需要分析的原始 SQL)。

    正如您所指出的,如果您的字段使用的某些功能无法正确交叉到 SQL Server,则可能会出现一些问题。 在尝试转换之前查看您在 Access 中的表并进行一些清理:

    对于布尔字段: 确保将它们的默认值设置为 0 或 1(它们不应为空)。 必填字段必须为非空: 确保您设置为“必填”的任何字段在其数据中不包含任何 NULL 值。 唯一索引不能忽略 Null: 检查您的索引是否未设置为“唯一”和“忽略空值”。 所有表都必须有干净的主键: 确保您的所有表都具有唯一的主键,并且其数据中没有 Null 值。

【讨论】:

以上是关于MS Access 2007 查询不在 SQL Server 2008 上运行的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 2007 中对 ODBC 表导入 sql 查询

如何在 MS Access 2007 中获取 sql 查询

尝试连接到 SQL 表时,MS Access 2007 中的查询错误

如何在 Ms Access 2007 中执行 Mysql 查询

将唯一记录插入 MS access 2007

如何通过 Java 从 MS Access 2007 数据库中读取 Unicode 字符?