从 MySQL 迁移到 MS SQL

Migrating from MySQL to MS SQL

我有一个 PHP (CODEIGNITER) 应用程序,它通常部署在 Apache/MySQL 组合上。我最近在 IIS8 和 MS SQL 11.0.2100.60

上部署了它

我通过使用 ODBC 连接迁移到 Access 数据库然后再次使用另一个 ODBC 连接迁移到 MS SQL 来迁移表和数据。我修改了 PHP 应用程序(PHP.ini、database.php、db_driver.php)的配置,以确保它正确连接并在 IIS 上运行。

我现在遇到 SQL 语法问题。当我尝试 运行 应用程序时,它没有给我数据库连接错误(它之前给出了)但是当我尝试登录到应用程序时(它具有用户身份验证) - 我收到以下错误:

Error Number: 42000

[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near '`'.

SELECT * from ctbl_events WHERE 2017-01-11 <= startdate AND `enddate` >= 2017-01-11 and status=0 ORDER BY `ctbl_events`.`id` 

Filename: C:\inetpub\wwwroot\GMS\system\database\DB_driver.php

Line Number: 330

这是否意味着问题出在 ` 符号上,如果是,我是否必须手动修改我的应用程序中的所有 SQL 查询(这将是一项艰巨的任务),或者有什么方法可以处理这个问题.

据我所知,SQL 服务器不支持使用反引号转义 table 或列名(您可以改用括号)。您可以通过 运行 一个简单的查询(例如

)轻松地尝试此操作
select * from `ctbl_events`

如果这不起作用,您几乎可以肯定必须更新所有查询以用方括号替换反引号。

查询可能失败的第二个原因是查询中的日期必须用引号括起来,并匹配 SQL 服务器的日期格式(这是可配置的,因此您可能需要稍微试验一下)。

因此,您尝试 运行 的查询应该看起来有点像这样:

SELECT * from ctbl_events 
WHERE '2017-01-11' <= startdate 
AND [enddate] >= '2017-01-11' 
and status=0 
ORDER BY [ctbl_events].[id]

尽管在这种情况下,您实际上并不需要 table 或列名周围的方括号 - 最好就此达成一致的标准并坚持使用。