Ошибка синтаксиса SQL на одном компьютере, но не на другом - PullRequest
1 голос
/ 11 августа 2010

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

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 на одном компьютере, а не на другом.

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

1 Ответ

3 голосов
/ 11 августа 2010

Параметры.в порядке вероятности ...

  • Что такое уровень базы данных ?sp_helpdb покажет вам.Чтобы использовать CTE

  • * 1011, вам должно быть не менее 90 лет. Что говорит SELECT @@ VERSION на обоих серверах SQL?Действительно оба '2008?
  • Попробуйте ;WITH... на случай, если у вас есть дополнительная команда SQL перед CTE

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...