2008-11-27 2 views
3

Разработчик среды БД сервер SqlServer 2005 (разработчик издание)SqlServer 2000 Совместимость

Есть ли способ, чтобы убедиться, что мой SQL-запросы будут работать в SqlServer 2000?

Эта база данных настроена на уровень совместимости «SQL Server 2000 (80)», но некоторые запросы, которые запускаются без проблем в системе разработки, не могут выполняться на тестовом сервере (SqlServer).

(Проблемы, как представляется, в подзапросов)

+0

Установка вашего окна разработчика (2005) в режим совместимости «80» должна решить проблему. Можете ли вы привести пример запроса, который имеет проблему? – 2008-11-27 11:49:47

ответ

2

Уровни совместимости предназначены для работы в обратном направлении - чтобы старая версия кода T-SQL, чтобы работать без изменений на более новой версии SQL Server. Изменения обычно включают в себя синтаксис T-SQL и зарезервированные слова, и в SQL Server 2005 можно использовать такие функции, как INCLUDED столбцы в индексах в базе данных на уровне совместимости 80. Однако вы не можете использовать возможности T-SQL 2005, такие как CROSS ПОДАТЬ ЗАЯВЛЕНИЕ.

Ваш лучший вариант - разработать/протестировать весь ваш код на экземпляре SQL Server 2000. Обратите внимание, что вы можете использовать 2005 Management Studio для подключения к экземпляру SQL Server 2000, поэтому вам не нужно идти назад в отношении инструментов.

+0

«Уровни совместимости предназначены для работы наоборот» - нет, это именно то, что он говорил. – 2008-11-27 11:48:27

0

Проблема решена:

В коррелированных подзапросов вы должны (в SQL2000) явно определить внешнее поле.

SQL2005:

SELECT * FROM Loans WHERE EXISTS (SELECT * FROM Collaterals WHERE COLLATERAL_LOAN=LOAN_NUMBER) 

SQL2000:

SELECT * FROM Loans WHERE EXISTS (SELECT * FROM Collaterals WHERE COLLATERAL_LOAN=Loans.LOAN_NUMBER) 
0

Вы должны всегда четко определить все поля, иначе вы не получите сообщение об ошибке, когда вы делаете ошибку и написать

SELECT * FROM Loans WHERE EXISTS (SELECT * FROM Collaterals WHERE LOAN_NUMBER=Loans.LOAN_NUMBER) 

Если таблица Collaterals-table не содержит столбец LOAN_NUMBER, вместо этого используется таблица Loans-table.

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