2017-01-11 20 views
0

私は通常、Apache/MySQLの組み合わせで展開されるPHP(CODEIGNITER)アプリケーションを使用しています。私は最近、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

両方のデータベースでは、日付定数は一重引用符で囲む必要があります。このクエリにはバッククイック検索は必要ありません。 –

答えて

2

私の知る限り、SQL Serverでは、テーブル名または列名をエスケープするためのバッククォートの使用はサポートされていません(代わりに大括弧を使用できます)。それでも解決しない場合はあなたが簡単に

select * from `ctbl_events` 

のような単純なクエリを実行することによって、これを試すことができ、あなたはほぼ確実に括弧でバッククォートを置き換えるために、すべてのクエリを更新する必要があります。

クエリのおそらく失敗している2番目の理由は、クエリの日付を引用符で囲んでSQL Serverの日付形式と一致させる必要があることです(これは設定可能なため、少し実験する必要があります)。

だから、あなたが実行しようとしているクエリは少しのようになります。この場合には、あなたが本当にテーブルやカラム名の前後に括弧を必要としませんが

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

- それはするのがベストですこれのための標準に同意し、それに固執する。

関連する問題