2010-08-11 3 views
1

У меня есть унаследованный веб-сайт, который я поддерживаю (построен в основном в классическом ASP с vbscript). Я делаю некоторые изменения и устал ждать 5 минут каждый раз, когда мне приходилось проходить через одну из страниц, загружавших 99000 записей из базы данных, прежде чем отображать первые 20 из них, поэтому я переписал код как:Ошибка синтаксиса SQL на одной машине, но не другая

sSQL = "WITH OrderedAgreements AS (SELECT *, ROW_NUMBER() OVER (ORDER BY " & strSort & ") AS 'RowNumber' FROM ServiceAgreement " & WhereClause & ")" 
sSQL = sSQL & " SELECT * FROM OrderedAgreements WHERE RowNumber BETWEEN " & iStartRec & " AND " & iStartRec + iPageSize - 1 
Set rs = Server.CreateObject("ADODB.Recordset") 

rs.Open sSQL, SQLConn, adOpenStatic, adLockReadOnly 

(целью является возвращение только строк, которые будут фактически отображаться).

Это нормально работает при работе с IIS-7 на моей локальной машине разработки (Windows 7). Он обращается к тестовой базе данных в SQL Server 2008 на сервере разработки в соседней лаборатории.

Однако, когда я запускаю идентичный код на бета-сайте производственного сервера (т. Е. Параллельное дерево каталогов на производственный сайт, доступ через другой порт HTTP), он дает мне «синтаксическую ошибку около ключевого слова», WITH '"

Рабочий сервер работает под управлением Windows Server 2003 R2 и IIS 6, но я не могу придумать, почему это должно вызвать ошибку на одном компьютере, а не на другом. Они работают с идентичным кодом, подключаясь к той же базе данных, доступ к которым осуществляется с той же последовательностью команд. Я даже поставил некоторый код регистрации для вывода SQL, который создается, и в обоих случаях он идентичен. Обе машины работают с фреймворком 2.0/3.0/3.5. На обеих машинах установлен SQL Server 2008.

Рабочий сервер доступен для меня (через RDP), но на нем нет Visual Studio. Я в значительной степени разбираюсь в том, как понять, почему тот же код получает синтаксическую ошибку SQL на одном компьютере, а не на другом.

Может ли кто-нибудь дать мне понять, как действовать дальше? Спасибо.

ответ

3

Опции. в порядке возрастания ...

  • Что такое DB compat level? sp_helpdb покажет вам. Для использования CTE

  • Что означает SELECT @@ VERSION на обоих серверах SQL? Неужели и «2008»?

  • Попробуйте ;WITH... в случае, если у вас есть дополнительные команды SQL перед КТР

наблюдательном ... почему бы не использовать параметры, а в конкатенации?

+0

Оба сайта подключаются к одному и тому же SQL Server, хотя каждый из них имеет установленный SQL-сервер. Ни один из них не работает в БД на машине - они оба подключаются к одной и той же базе данных удаленных разработок. Поэтому я бы предположил, что SELECT @@ VERSION вернёт то же самое в обоих случаях, поскольку они подключаются к одной и той же БД. И я предполагаю то же самое для sp_helpdb, но я попробую. Я дам полуколонии попробовать, но так как строка sSQL пуста, я могу посмотреть, как может быть заявление перед ней. –

+0

Вы должны проверить удаленный SQL Server: это то, где работает ваш SQL. Кто заботится о том, что установлено локально? Кроме того, они подключаются к различным базам данных с разными уровнями совместимости? Я также хотел бы проверить SELECT @@ SERVERNAME, чтобы убедиться, что все ваши SQL работает в одном и том же поле. Тот же SQL-код на одном и том же БД в одном экземпляре от разных клиентов * не будет работать * по-другому. – gbn

+0

Ну, я не уверен, что это было - я изменил уровень совместимости с 80 до 90 (надеюсь, что это не закончит тем, что все испортит - я думаю, что это было так по умолчанию, поскольку БД была первоначально перенесена от более старого сервера), и я также добавил полуточку. Теперь он работает на бета-сервере. Поэтому я не буду жаловаться. Спасибо за вашу помощь. –

Смежные вопросы