从MySQL迁移到MS SQL

时间:2017-01-11 12:49:46

标签: php sql sql-server codeigniter iis-8

我有一个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查询(这将是一个巨大的任务)或有任何方法来处理这个。

1 个答案:

答案 0 :(得分:2)

据我所知,SQL Server不支持使用反引号来转义表名或列名(您可以使用括号代替)。您可以通过运行像

这样的简单查询轻松尝试此操作
select * from `ctbl_events`

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

查询可能失败的第二个原因是查询中的日期必须用引号括起来,并且与SQL Server的日期格式匹配(这是可配置的,因此您可能需要进行一些实验)。

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

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

虽然在这种情况下,你并不需要围绕表格或列名称的括号 - 最好同意这个标准并坚持下去。