MS Access 查询转换为 Sql Server

Posted

技术标签:

【中文标题】MS Access 查询转换为 Sql Server【英文标题】:MS Access Queries Conversion to Sql Server 【发布时间】:2014-06-20 12:58:50 【问题描述】:

我正在将大量访问查询转换为 sql server 存储过程。所以sql需要满足t-sql标准。例如 IIF 等 是否有可以将大访问查询转换为 t-sql 的工具?这样做的最佳方法是什么?

【问题讨论】:

对不起,但我认为最好的方法是手动逐个翻译查询。 【参考方案1】:

至于只是为您转换查询的“工具”,我不知道有一个。 this thread 或 this site 上也没有任何人。

不过,有几个地方我可以指导你,这可能有助于过渡。

Here is a cheat sheet you can use as a quick glance when converting your queries.

如果您的查询使用任何 [Forms]!参考,也可能有问题。 (我从未尝试过,但我会假设它不起作用。)

This resource 可能对您可能需要在 SQL Server 中学习的内容进行了最详细的解释。从存储查询到处理 NULL 到其他一些差异。与 T-SQL 相比,MS Access SQL 也存在差异。 Gordon Linoff 在他的blog 中简要描述了 10 个重要区别。

    Access不支持case语句,所以条件逻辑是 使用非标准的 IIf()Switch() 函数完成。 访问需要在每个成对连接周围加上括号,从而导致 嵌套在 from 子句中的扩散仅用于 让学习 SQL 的人感到困惑。 访问联接语法要求 INNER 用于 INNER JOIN。虽然它可能 使用内部进行澄清是一个好主意,它经常被省略 练习(在其他数据库中)。 Access 不支持完全外连接。 访问不允许子查询中的 union 或 union all。 Access 需要 AS 作为表别名。在大多数数据库中,这 是可选的,我更喜欢只使用 as 作为列别名。 具有讽刺意味的是,在 Oracle 中禁止使用 as 作为表别名。 Access 使用双引号来分隔字符串(而不是单引号) 引号)并且是(据我所知)唯一使用 & 作为 字符串连接运算符。 Access 使用 * 作为通配符,而不是 %。 访问允许 BETWEEN AND 。这在其他数据库中是允许的,但是 将始终评估为 false。 Access 不支持窗口/分析函数(使用 over 和分句)。

总之,不,我没有见过任何工具。

【讨论】:

Linoff 先生的博客 cmets 的一些更正和扩展。 RE: (1) Access 还有一个Switch() 函数,它与CASE .. WHEN 更接近,可以避免多个嵌套的IIf() 函数。 RE: (6) 不,表别名不需要AS 关键字;它是可选的。 RE: (7) Access SQL 支持字符串文字的单引号和双引号。 Access SQL 还支持 &+ 进行字符串连接,尽管它们处理 Null 的方式不同。 谢谢!好点。我经常忘记Switch() 的存在。如果您认为合适,请随时编辑我的答案! 2 个头脑大于 1 个。

以上是关于MS Access 查询转换为 Sql Server的主要内容,如果未能解决你的问题,请参考以下文章

谁能帮我将 Access Query 转换为 MS SQL Query

将 MS Access 查询转换为 MariaDB

在 MS Access SQL 查询中从普通日期转换为 unix 纪元日期

日期转换错误——MS Access前端查询sql后端

将 MS Access 查询(使用 IIF() 和 DATESERIAL())事务处理到 T-SQL

将 Access 交叉表查询转换为 SQL Server