2017-01-11 11 views
0

У меня есть приложение PHP (CODEIGNITER), которое обычно развертывается в комбинации Apache/MySQL. Я недавно развернул его на IIS8 и MS SQL 11.0.2100.60Миграция с MySQL на MS SQL

Я перенес таблицы и данные с помощью соединения 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

В обеих базах данных константы даты должны быть заключены в одинарные кавычки. Backticks не нужны для этого запроса. –

ответ

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] 

Хотя в данном случае, вы на самом деле не нужны скобки таблицы или колонки - это лучше соглашайтесь с этим стандартом и придерживайтесь его.