ビューにて下記のように設定し「SQLの実行」は指定通りソート
されましたが、「ビューを開く」では、ソートされずテーブルの
並びのままでした。
SELECT TOP (100) PERCENT 端末コード, 端末番号
FROM dbo.T_端末
ORDER BY 端末コード
そこで、下記のように設定を変更したところ「ビューを開く」でも
ソートされるようになりました。
SELECT TOP (1000) 端末コード, 端末番号
FROM dbo.T_端末
ORDER BY 端末コード
TOP (件数) に全データ数以上を指定すれば機能するのは解りますが
「ビュー」とはそんな使い方なのでしょうか?
No.2ベストアンサー
- 回答日時:
ビューを単純に照会したときにORDER句を切らなくても希望する並び順でSELECTできれば、運用上は便利なことが多いです。
そのため、SQL Serverでは昔からTipsでTOP 100 PERCENTで並び替える方法が認識されていました。
(Tipsとある通り、普通はViewの外でOrder切ります)
ただし、SQL Server 2005になって、TOP 100 PERCENTは「並び替えの必要なし」とオプティマイザが判断するように仕様が変更されてしまいました。そのため、SQL Server 2005ではTOP 100 PERCENT句をViewに切っても並び替えは起こりません。
それだけなら分かりやすいのですが、やはりこの技を使っていた人が多かったためでしょうか。SP2の後の累積パッチ「SP2の累積プログラムその2」でこれを修正するモジュールが提供されています。
SP2には入っていないし、わざわざ当てる人も少ないと思うので、次のSP3が出たとして、それ当てた時からTOP 100 PERCENTが効くようになるでしょう。
ちなみにSQL Server 2008でも初期バージョンではTOP 100 PERCENTが効かず、累積パッチが提供されています。
ということで、そのようなビューの使い方は正しいアプローチではありませんが、SQL Serverの裏ワザの一つですと認識ください。
この数日悶々としていましたが、スッキリしました。
本当にありがとうございます。
ACCESSのMDBからADP+SQLに変えようとしているのですが・・・
このビューを表示させる(並び替える)のに、SELECTを使うとビューの
SELECTと合わせて二回のSELECTをサーバー側とクライアント側で
一回ずつ実行する訳ですよね?
効率が悪い様な気がして一回で済ませようと考えています。
そんな事はないのでしょうか?
(今は数は増えるかもしれませんが、基本的にビュー側でSELECTして、
ACCESS側はそのクエリーを表示させるように作ろうと考えています)
ビューだけでなく関数も同様ですのでパッチをあてたいのですが、
SP2の後の累積パッチ「SP2の累積プログラムその2」を見つける事が
出来ません、所在を教えて頂けると助かります。
No.4
- 回答日時:
>
http://support.microsoft.com/kb/936305/↑の先頭にある「修正プログラムのダウンロード」だと
64bitの環境しかありません、32bitのパッチは何処にあるのでしょうか?
これは気づきませんでした。32bit版だけ提供を打ち切っているのですね。その場合は累積プログラム3以降を使えばよいです。
http://support.microsoft.com/kb/939537/
ちなみに累積プログラムは文字通りそれまでのパッチが含まれます。
(すでに累積プログラムは9まで出ています)
>ビューは細工をせずに使い、細工する場合はテーブル値関数を使った方がいいと言うことでしょうか?
基本的にはその通りです。もし極力すべて(抽出も並び替えも)をサーバ側のオブジェクトに含めて処理してしまい、Accessは表示に徹するという考えなら、むしろストアドプロシージャを使う方がよいと思います(TOP 100 PERCENTをあてにする必要もなくなりますし)。
まあ、adpとの相性やそれ以外の使い勝手もあるでしょうから一概にはいえませんが。まあいろいろ試してみてください。
深夜の回答ありがとうございました。
結果を報告しますと、2をDLしてインストールしようとしたのですが、
更新する項目にチェックが入れられず、結局9をDLしてインストール
しました。
しかし、改善はされませんでした。
あれこれ変なパッチをあてようとしたのが原因だと思います。
現在は180日の評価版を使っていますので、サーバーを導入する時は
この辺を注意して作業します。
ビューについては教えていただいた方法で検討する事にします。
本当にありがとうございました、今後も質問することが多々あると思いますが、
何卒よろしくお願いします。
No.3
- 回答日時:
ビューの中にORDERを切ると、そのビューを照会するたびにORDERが実行されますので、基本的には非効率です。
たとえば、毎回Accessで抽出するデータは数十件なのに、テーブルには数万件のデータが入っているケースを考えてみてください。
テーブル関数ならば結果を絞って返すこともできますが、ビューの場合は本来なら数十件の並べ替えで済むところを、データベース側で毎回数万件の並べ替えを行うことになりかねません。
従って、常に全件近く戻す場合を除いてはビューの中にはORDERを切らない方がいいと思いますよ。
なお、累積プログラム2は以下です。
http://support.microsoft.com/kb/936305/
累積プログラムはSPに含まれるまでは、基本的に自己責任で当てると思った方がよいです。十分確認してからの適用をお勧めします。
何度も回答いただきありがとうございます。
あっちこっち探したのですがスキル不足で見つかりませんでした。
http://support.microsoft.com/kb/936305/
↑の先頭にある「修正プログラムのダウンロード」だと
64bitの環境しかありません、32bitのパッチは何処にあるのでしょうか?
> ビューを照会するたびにORDERが実行されますので非効率です。
ビューは細工をせずに使い、細工する場合はテーブル値関数を
使った方がいいと言うことでしょうか?
(イマイチビューと関数の使い分けが理解できておりません)
No.1
- 回答日時:
>「ビュー」とはそんな使い方なのでしょうか?
の意図するところはよくわかりませんが..
ビューを使用する目的としては、
セキュリティ上、全データでは無く一部のデータを見せるために使用するのが一般的ではないかと思います。(元のテーブルはセキュリティで制限して直接見えない様にして、ビューだけを見せる様にする)
または
よく使用する条件でビューを作成して使用する。
質問の例の、 TOP (100) PERCENT は意味が無いですね。
TOP句は書く必要がありません。
二つ目は、端末コードの若い順に1000行を選択する意味になります。
この回答への補足
ありがとうございます。 もう少し教えて下さい。
> TOP (100) PERCENT は意味が無いですね。
ORDER句があるとTOP句は自動で付与されてしまいます。
(本を読むと「ビュー」ではTOP句が無いときはORDER句も
指定できないからだと思います)
ただ、TOP (100) PERCENT だと並び替えされないのです。
「ビュー」で全件表示でソートするには最大件数以上の行数を
指定しないとソートできないのでしょうか?
TOP (100) PERCENT・・・並び替えしない
TOP (1000)・・・並び替わる
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Android(アンドロイド) auのAndroid端末のSIMカードがロックされてしまいました。 6 2022/08/22 20:31
- iCloud iPhone端末変更時のLINE引継ぎ 4 2023/07/09 15:07
- その他(スマートフォン・携帯電話・VR) ライフベアのことで知りたいことがあります。 旧Android端末にインストールしていたので、引き継ぎ 2 2023/05/07 21:19
- Bluetooth・テザリング android(Galaxy S-22)、bluetoothの「この端末名」がコロコロ変わる 1 2022/12/17 13:15
- その他(スマートフォン・携帯電話・VR) 生成AIの回答は本当ですか? 新スマホにINEデータを引継ぎには? 2 2023/08/18 06:43
- docomo(ドコモ) ドコモのオンライン購入、開通が先?初期設定が先? 2 2022/10/19 03:01
- 格安スマホ・SIMフリースマホ 端末設定画面とアプリのデータ使用量の誤差について 4 2023/04/12 18:02
- Android(アンドロイド) 見にくくてすみません。下の画像中央あたりの緑のバーの右端に、逆三角形の場所があるのですが、これを押す 1 2023/01/27 05:52
- 格安スマホ・SIMフリースマホ 楽天ハンド MNPして対応してる端末に変えたら esimでなくても使えますよね? 1 2022/08/05 22:10
- iPhone(アイフォーン) 現在iPhone7の4Gでデータ量5Gを2台で分け合っております。私だけオンライン新規で新しいiPh 3 2022/10/13 16:05
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Viewにインデックスは張れますか?
Oracle
-
VIEWに対してWHERE句をつける
MySQL
-
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
-
4
ODBCの接続に失敗しました(3146)について
その他(Microsoft Office)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
7
SUBSTRING 関数に渡した長さのパラメータが無効です。
SQL Server
-
8
SQL Serverにおける小数部の0表記について
その他(プログラミング・Web制作)
-
9
GROUP BYでエラーが発生
SQL Server
-
10
SQLServerでViewの参照・・・
SQL Server
-
11
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
12
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
13
ストアドプロシジャからストアドプロシジャを呼ぶには?
Oracle
-
14
MS SQLServer のSQLで文字列の前にN:
その他(データベース)
-
15
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
16
SQLServer2005のSQL文での別名の取り扱い
SQL Server
-
17
レコードの登録順がおかしい
MySQL
-
18
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
19
副問合せの書き方について
SQL Server
-
20
Transact-SQLでストアードプロシージャ・関数内でのみ有効なモジュールは作れますか?
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
アクセス レコードセットを更...
-
Access VBAからエクセルに出力...
-
Accessのテーブルデータを一気...
-
CSVファイルを毎日、全レコード...
-
IF NOT EXISTを使用するINSERT文
-
Oracleで上書きImportはできま...
-
ビューのソートについて
-
データベースを設計するときに
-
PostgreSQLのパフォーマンスに...
-
Access無いけど.mdbが見たい!
-
このISAMでは、リンクテーブル・・
-
ACCESSで容量が50MBになった...
-
マテリアライズドビューとスナ...
-
構文エラー : 演算子がありませ...
-
Accessの処理速度を速めるため...
-
結合テーブルでINSERTする方法...
-
大量データの集計を早くするには?
-
「テーブルに座って……」という...
-
テーブル名をカラムとして取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
Oracleで上書きImportはできま...
-
アクセス レコードセットを更...
-
構文エラー : 演算子がありませ...
-
処理の途中で停止させ、再開さ...
-
ビューのソートについて
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
同一テーブルのデータを参照し...
-
ACCESSで容量が50MBになった...
-
マテリアライズドビューとスナ...
-
Accessのインポートについて(上...
-
MS Accessを共有した際にファイ...
-
「クリップボードにコピーされ...
-
重複クエリを使ったデータ削除
-
ERROR1062:Duplicate entry.......
-
access 特定のレコード数までエ...
おすすめ情報