SQL-Server2000で使用していたDBをSQL-Server2008に移行し使用するようになったのですがVB6.0の画面上でデータの並びが変わってしまいました。DBの照合順序は「Japanese_CI_AS」で変わっていないのですがなぜなのでしょうか?また「Japanese_XJIS_100_CI_AS」に変えても同様でした。できれば照合順序は変えずになんとかできないかと思っているのですが無理なのでしょうか?このままではすべてのSQLに並び替えのコードを入れていかないといけないかと思っておりますができれば何とか回避したいのです。なにとぞご教授お願いいたします。
> VB6.0の画面上でデータの並びが変わってしまいました。と言われましても、どのようにして並べているのかを教えていただかないと、答えようがありません。(^_^;)たとえば ORDER BY 指定で並べているとか、ADO の Sort プロパティで並べているとか、ListView のソート機能を使っているなどといった、現状の処理手順を教えてください。(並び順を指定していないなら、どの順番になるかは不定という事になるでしょう)> また「Japanese_XJIS_100_CI_AS」に変えても同様でした。DB の照合順序を変更せずとも、ORDER BY 時に COLLATE を指定できますよ。http://msdn.microsoft.com/ja-jp/library/ms188385.aspxhttp://msdn.microsoft.com/ja-jp/library/ms184391.aspx
早速のご返信ありがとうございます。> > VB6.0の画面上でデータの並びが変わってしまいました。> と言われましても、どのようにして並べているのかを教えていただかないと、> 答えようがありません。(^_^;)ADOでデータを抽出してコンボボックスやSpreadにセットしています。Order by を使っているところは問題ないのですが使っていないところで並びが変わってしまいました。> DB の照合順序を変更せずとも、ORDER BY 時に COLLATE を指定できますよ。問題の個所が多いため出来れば order by 自体使わずに済ましたいのです。何か方法なり原因(SQL-Serverの変更点?)がおわかりであればご教授下さい.
> Order by を使っているところは問題ないのですが使っていないところで> 並びが変わってしまいました。テーブルに含まれる列それぞれの間に順序は存在しないため,順番を気にするのであれば「必ず」ORDER BYを付けてください。MSDN: SELECT ステートメントの構成要素http://msdn.microsoft.com/ja-jp/library/ms190617.aspx# 記述時点での最新は SQL Server 2008 オンライン ブック (2009 年 7 月)にも,> リレーショナル理論では、ORDER BY 句を指定しないと結果セット内の行がなんらかの順序に従っていると見なすことができないので、ORDER BY 句の指定は重要です。> 結果セットの行の順番が重要な SELECT ステートメントでは、ORDER BY 句を使用する必要があります。と書いてあります。
返信ありがとうございます。今までDBの並びをある程度信用していたので中には並びを指定していないところがありました。これからは指定するようにします。(いつDBのVerUpがあるかもわかりませんので)ありがとうございました。
> 何か方法なり原因(SQL-Serverの変更点?)がおわかりであればご教授下さい. 強いて原因を挙げるなら「コーディング漏れ」だと思います。アプリ作成時のバグですね。SQL での ORDER BY 指定、あるいは取得後のソート作業のいずれかが必要になります。もう少し詳細な推測情報としては、このあたり。[SQL Server デベロッパーセンター] - [ORDER BY なしでSELECTが返す行の順番について]http://social.msdn.microsoft.com/Forums/ja-JP/sqlserverja/thread/e4411e28-0f93-48a4-90fa-07261a52b5af> Order by を使っているところは問題ないのですが使っていないところで> 並びが変わってしまいました。それは仕様です。別に SQL Server に限った話では無く、ほとんどのリレーショナルデータベースにおいて、明示的な並び順を指定しなかった場合の取得順序は不定とされています。たとえば、格納順や Index 順に並んでいるように見えても、データの削除と再挿入・デフラグ後のデータリカバリー作業・DB の最適化・Index の再生成などの作業を行っていく事で、以前とは異なる並び順で取得されるというケースもあります。あるいは、一見望んでいる並び順に見えていたとしても、実はその中の一部だけは望んでいない並び順になっていた(しかしそれに気づいていなかった)といったケースも存在します。