2011-07-09 15 views
2

私は新しくSQL Server 2008 r2をインストールして、下位互換性をインストールするためのオプションを選択しました(削除プログラムの下位互換性がインストールされていることを示しています) その後、SQLスクリプトを実行して古いデータベースをアップグレードします。 (正確なエラーについては画像を参照してください)。 (SQLプロファイラによると:SQLDMO_1がエラーをスローする)SQL Server R2の下位互換性のあるmsi VSとSQL Server 2005の下位互換性のあるmsiとの間に違いはありますか?

enter image description here

しかし、私は明示的にSQLServerの後方互換性(SQLServer2005_BC.msiをサイトからダウンロード)をインストールし、同じアップグレード、をしたとき、その正常に働いていました。

私はなぜそれが起こっているのか分かりませんか?

SQLDMO.DLL(SQL ServerのインストールとSQLサーバーの両方)を比較しましたが、どちらもうまくできています。 誰も同じ種類の問題や示唆を得ましたか?

更新: いいえ、下位互換性のインストールに関連する問題はありませんでした。最近、同じエラーが発生し、bakward互換のmsiをインストールすることで解決できると思ったが解決しなかった。

それでも理由はサスペンスです。

+0

もちろん、実際の問題は、SQL Server 2000でさえも外部結合を使用してはならないということです。クロス結合として誤解されることがあります。コードを修正する - 互換モードを使用しても、信頼できない結果をもたらすコードが悪い。 – HLGEM

+0

@HLGEMこれは本当に悪いコードです。しかし、コードは10年前に書かれており、100または200 LOC、1000sの1000s rではありません。とにかく私は修正する必要がありますが、私は今それを行うことはできません。代替案を見なければなりません。さらに、私はなぜそれが起こるかに焦点を当てていましたか?ではない何をすべきか? – PawanS

答えて

1

SQL Server 2008+では、旧式のANSI 89結合、つまり*=または=*をサポートしていません。 SQL Server 2008またはそれ以上にアップグレードする前に、これらを左右の外部ジョインに置き換える必要があります。これらを含むコードは、エラーを発生させずにコンパイルすることはできません。

SQL Server 2005は、古いスタイルの結合をサポートする最も高いバージョンです。

互換モード80/90/100は、主に、新しいキーワードが従来のデータベースで使用されている場合に使用します。これにより、構文エラーが発生します。互換モードを低くすると、新しい機能/予約済みキーワードがパーサーから削除され、データベースから削除されます。

1

エラーが発生しているとは、下位互換性コンポーネントとは関係ありません。エラーが示唆するように、80または90または100ではなく80に設定されていると、実行中のクエリが機能するため、クエリを実行しているデータベースが互換モード80または90または100に設定されている場合、 sqlを新規インストールした場合、すべてのデータベースは100に設定されます。アップグレードを行った場合、SQL 2000からアップグレードされた場合、以前のバージョンの80になります。

+0

ええ、それは本当です....しかし、ここで問題は私がSQL Serverとの下位互換性をインストールした場合、エラーが発生している設定です。しかし、下位互換性が明示的にインストールされていないと、それは発生しません。 – PawanS

+0

ギャップ - これは意味があります。なぜなら、下位互換性をインストールすると、アップグレードされたデータベースを80モードで実行できるからです。あなたがそれを選んでいないと、SQLサーバーはデフォルトで100を使用してエラーを引き起こします。 –

関連する問題