2008-11-27 7 views
3

Le serveur environnement de développement db est SqlServer 2005 (édition développeur)SqlServer 2000 Compatibilité

Est-il possible de faire en sorte que mes requêtes SQL se déroulera dans SqlServer 2000?

Cette base de données est définie sur Niveau de compatibilité "SQL Server 2000 (80)", mais certaines requêtes exécutées sans problèmes dans le système de développement ne peuvent pas s'exécuter dans le serveur de test (SqlServer).

(Les problèmes semble être dans les sous-requêtes)

+0

Définir votre boîte de dev (le 2005) en mode compat "80" devrait résoudre le problème. Pouvez-vous donner un exemple d'une requête qui a un problème? –

Répondre

2

niveaux de compatibilité sont conçus pour fonctionner dans le sens opposé - pour permettre une ancienne version d'un code T-SQL pour travailler sans modifications sur une nouvelle version de SQL Server. Les modifications impliquent généralement la syntaxe T-SQL et les mots réservés, et il est possible d'utiliser des fonctionnalités SQL Server 2005 telles que les colonnes INCLUDED dans les index d'une base de données du niveau de compatibilité 80. Toutefois, vous ne pouvez pas utiliser les fonctionnalités T-SQL 2005 telles que CROSS. APPLIQUER.

Votre meilleure option est de développer/tester tout votre code sur une instance SQL Server 2000. Notez que vous pouvez utiliser Management Studio 2005 pour vous connecter à l'instance SQL Server 2000, vous n'avez donc pas à revenir en arrière en ce qui concerne les outils.

+0

"Les niveaux de compatibilité sont conçus pour fonctionner dans le sens opposé" - non, c'est exactement ce qu'il disait. –

+0

Je veux dire qu'ils sont conçus pour fonctionner à l'opposé de la façon dont il essaie de les utiliser. Dans ce cas, il utilise le niveau de compatibilité 80 pour tester le code de 2005 contre 2000, alors que CL80 est censé être utilisé pour exécuter du code 2000 sur un système de 2005. –

0

Problème résolu:

Dans les sous-requêtes corrélées vous devez (en SQL2000) définissent explicitement le champ extérieur.

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

Vous devez toujours définir explicitement tous les champs, sinon vous n'obtiendrez une erreur lorsque vous faites une erreur et écrire

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

Si Collaterals-table n'a pas de colonne LOAN_NUMBER, la table Loans est utilisée à la place.