tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルSQL-Server2008
記事No14654
投稿日: 2010/04/27(Tue) 21:20
投稿者taka
SQL-Server2000で使用していたDBをSQL-Server2008に移行し使用するようになったのですが
VB6.0の画面上でデータの並びが変わってしまいました。
DBの照合順序は「Japanese_CI_AS」で変わっていないのですがなぜなのでしょうか?
また「Japanese_XJIS_100_CI_AS」に変えても同様でした。
できれば照合順序は変えずになんとかできないかと思っているのですが無理なのでしょうか?
このままではすべてのSQLに並び替えのコードを入れていかないといけないかと
思っておりますができれば何とか回避したいのです。
なにとぞご教授お願いいたします。

[ツリー表示へ]
タイトルRe: SQL-Server2008
記事No14655
投稿日: 2010/04/27(Tue) 21:34
投稿者魔界の仮面弁士
> VB6.0の画面上でデータの並びが変わってしまいました。
と言われましても、どのようにして並べているのかを教えていただかないと、
答えようがありません。(^_^;)

たとえば ORDER BY 指定で並べているとか、ADO の Sort プロパティで並べているとか、
ListView のソート機能を使っているなどといった、現状の処理手順を教えてください。
(並び順を指定していないなら、どの順番になるかは不定という事になるでしょう)


> また「Japanese_XJIS_100_CI_AS」に変えても同様でした。
DB の照合順序を変更せずとも、ORDER BY 時に COLLATE を指定できますよ。
http://msdn.microsoft.com/ja-jp/library/ms188385.aspx
http://msdn.microsoft.com/ja-jp/library/ms184391.aspx

[ツリー表示へ]
タイトルRe^2: SQL-Server2008
記事No14656
投稿日: 2010/04/28(Wed) 00:26
投稿者taka
早速のご返信ありがとうございます。

> > VB6.0の画面上でデータの並びが変わってしまいました。
> と言われましても、どのようにして並べているのかを教えていただかないと、
> 答えようがありません。(^_^;)
ADOでデータを抽出してコンボボックスやSpreadにセットしています。
Order by を使っているところは問題ないのですが使っていないところで
並びが変わってしまいました。

> DB の照合順序を変更せずとも、ORDER BY 時に COLLATE を指定できますよ。
問題の個所が多いため出来れば order by 自体使わずに済ましたいのです。

何か方法なり原因(SQL-Serverの変更点?)がおわかりであればご教授下さい.

[ツリー表示へ]
タイトルRe^3: SQL-Server2008
記事No14657
投稿日: 2010/04/28(Wed) 00:35
投稿者YuO
> 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 句を使用する必要があります。
と書いてあります。

[ツリー表示へ]
タイトルRe^4: SQL-Server2008
記事No14659
投稿日: 2010/04/28(Wed) 09:37
投稿者taka
返信ありがとうございます。

今までDBの並びをある程度信用していたので中には並びを指定していない
ところがありました。

これからは指定するようにします。(いつDBのVerUpがあるかもわかりませんので)

ありがとうございました。

[ツリー表示へ]
タイトルRe^3: SQL-Server2008
記事No14658
投稿日: 2010/04/28(Wed) 09:18
投稿者魔界の仮面弁士
> 何か方法なり原因(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 の再生成などの作業を
行っていく事で、以前とは異なる並び順で取得されるというケースもあります。

あるいは、一見望んでいる並び順に見えていたとしても、実はその中の一部だけは
望んでいない並び順になっていた(しかしそれに気づいていなかった)といった
ケースも存在します。

[ツリー表示へ]