開発環境の db サーバーは SqlServer 2005 (開発者版)
SQL クエリが SqlServer 2000 で確実に実行されるようにする方法はありますか?
このデータベースは互換性レベル「SQL Server 2000 (80)」に設定されていますが、開発システムでは問題なく実行される一部のクエリは、テスト サーバー (SqlServer) では実行できません。
(問題はサブクエリにあるようです)
開発環境の db サーバーは SqlServer 2005 (開発者版)
SQL クエリが SqlServer 2000 で確実に実行されるようにする方法はありますか?
このデータベースは互換性レベル「SQL Server 2000 (80)」に設定されていますが、開発システムでは問題なく実行される一部のクエリは、テスト サーバー (SqlServer) では実行できません。
(問題はサブクエリにあるようです)
互換性レベルは、逆に機能するように設計されています。つまり、古いバージョンの T-SQL コードが新しいバージョンの SQL Server で変更を加えることなく機能するようにします。通常、変更には T-SQL 構文と予約語が含まれ、互換性レベル 80 のデータベースのインデックスで INCLUDED 列などの SQL Server 2005 機能を使用することは可能です。ただし、CROSS などの 2005 T-SQL 機能は使用できません。申し込み。
最良のオプションは、SQL Server 2000 インスタンスに対してすべてのコードを開発/テストすることです。2005 の Management Studio を使用して SQL Server 2000 インスタンスに接続できるため、ツールに関して過去にさかのぼる必要はありません。
問題が解決しました:
相関サブクエリでは、(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)
すべてのフィールドを常に明示的に定義する必要があります。そうしないと、間違って記述したときにエラーが発生しません。
SELECT * FROM Loans WHERE EXISTS (SELECT * FROM Collaterals WHERE LOAN_NUMBER=Loans.LOAN_NUMBER)
Collaterals-table に列 LOAN_NUMBER がない場合は、代わりに Loans-table が使用されます。