2016年05月17日

SQLServerでのページング機能(Offset Fetch)

SQLServerでページング機能を実装したいときに、データの何番目〜何番目までを取得する、というSQL文を書きたい場合があります。
SQLServer2012から、これを簡潔にかける構文があることを、今日知りました。

OrderBy句に対して、さらにOffsetとFetchの句を組み合わせることで、簡単に書くことができます。
詳しくは、https://technet.microsoft.com/ja-jp/library/ms188385(v=sql.110).aspx

昔はちょっと技巧的なやり方をしていましたが、これならとてもシンプルです。

ただ、大量データに対して行う場合は注意が必要です。
OrderBy句を指定する必要があるので、テーブルの全件ソートが発生します。
SQLServer内部では、テーブルの内容を一度すべてソートした後、OffsetとFetchで指定した範囲のデータを取り出します。

インデックスを適切に設定しておかないと、応答が返ってこないということになりかねないので、設計には十分注意が必要ですね。
posted by キヨ at 21:54| Comment(0) | TrackBack(0) | SQLServer

2016年01月17日

パスワード付Excelに対応したデータ分析ツールがない

データ分析ツールのニーズが高まっていますが、パスワード付Excelファイルに対応したデータ分析ツールは、ないですね。
情報保護の観点から、大量のパスワード付Excelファイルを利用して業務をしていた現場では、こういったツールを容易に導入ができません。

パスワード設定/解除を制御する仕組みを独自に作り込めばよさそうではありますが・・・
どう解決していくかは、悩ましいところです。が、エンジニアの腕の見せ所でもあります。
posted by キヨ at 20:47| Comment(0) | TrackBack(0) | SQLServer

2015年09月22日

SQLServerでIDENTITYが設定された列に任意の値を入れる方法

SQLServerでIDENTITYが設定された列に、強引に任意の値を入れなければならない事態がありました。
調べてみたところ、これを実現する機能がありました。

SET IDENTITY_INSERT

という命令で、IDENTITYが設定された列に強引に任意の値を入れるか入れないかのON/OFF設定ができます。
「SET IDENTITY_INSERT」で検索すると、関連する情報がたくさん出てきます。
知っておくと、DBメンテナンスでいざという時に役に立ちます。
posted by キヨ at 08:36| Comment(0) | TrackBack(0) | SQLServer

2015年04月23日

SSRS(SQL Serer Reporting Service)は使えるツールか?

.NETラボという勉強会で、SSRS(SQL Serer Reporting Service)についてのセッションがあったので参加してみました

SSRSとは、SQLServerにあるデータをもとに、視覚的なレポートを作成するツールです。
以前からSSRSの存在は知っていましたが、SSRSの使いどころや実務的メリットがなかなか見えませんでした。
たぶん私が知る限り、SSRSを扱ったテーマの勉強会が史上初(いいすぎかも)だったので、参加してみたわけです。

SSRSでどんなことができるのかは様々な資料がネット上に存在しますが、SSRSを使ってこのような経営課題を解決したとか、こんな風に業務を効率化したというような実利的インパクトに触れる機会は今まで全くありませんでした。

レポーティングの製品なら、他社から立派なツールも出ています。SSRS程度の機能なら、Accessからリンクテーブル経由でデータを読み出して帳票作成もできます。またExcelからSQLSererのデータを引っ張ってくるほうが、SSRSより使い勝手はよいかもしれません。

当日のセッションでは、SSRSの概要を紹介するくらいの内容でした。
セッション後のミニ懇親会で、講師に直接聞いてみましたが、講師の方もそこまでの実利メリットを感じているわけではなかったようです。

ただ一つメリットを上げるとするなら、ウェブ経由でレポート画像を提供するニーズには比較的手早くこたえられるという点でしょうか。しかし、使える場面がかなり限定的ですし、いろんな場面で使える!とまでは言えないと感じます。

SQLServer本体やSSASのほうは、Microsoftも力を入れて開発していますが、SSRSがそれに比べるとイマイチ弱い感じですね。

DBにあるデータを視覚化するニーズは非常に大きいので、SSRSがこれをうまく解決するツールになってくれると積極的に活用するのになあ・・・。
セッション前と、後とで、気持ちに変化なしです(笑)
(注:セッションが悪いわけではなく、ツールの有用性に問題があると思っています。)

今後のMSの開発に、期待します。
posted by キヨ at 07:00| Comment(0) | TrackBack(0) | SQLServer

2010年12月05日

次期SQLServerで、インメモリ処理が搭載されるかも

時期SQLServerでは、データベースを列方向に圧縮するカラムナデータベースや、メモリ上にデータを置いて高速に処理するインメモリ機能が搭載される予定だそうです。
http://www.publickey1.jp/blog/10/sql_server.html

より高速な処理に対応できるようになるでしょうか。
posted by キヨ at 14:48| Comment(0) | TrackBack(0) | SQLServer

2010年11月10日

SQLServer エラーメッセージ一覧

SQLServerで発生したエラーのIDとその内容(メッセージ)についての対応は、以下のSQL文でその一覧を取得することができます。

select *
from sys.messages

【参考】
http://msdn.microsoft.com/ja-jp/library/ms187382.aspx
posted by キヨ at 22:01| Comment(0) | TrackBack(0) | SQLServer

2010年10月31日

全テーブルの行数を取得する方法

SQLServer2005以上で、データベース内の全テーブルの行数を取得する方法です。

-- テーブルの行数取得
select
object_name(object_id) as テーブル名
,rows
from sys.partitions
order by object_name(object_id)
posted by キヨ at 22:52| Comment(0) | TrackBack(0) | SQLServer

2010年09月28日

トランザクションログの切り捨て

SQLServerのトランザクションログは、何もしなければどんどん拡大していきます。
かといって、復旧モデルを「単純」にしてしまうと、自動的にログが削除されるため、不測の事態が発生したときのデータの復旧が困難になります(具体的には、バックアップを取った時点以降のデータは復旧できません)

トランザクションログを切り捨てるためには、トランザクションログをバックアップする必要があります。
トランザクションログのバックアップを定期的に実施することで、トランザクションログを効率よく切り捨てることができます。
こうすることで、不測の事態からのデータ復旧も可能になり、またログファイルが際限なく肥大化することも防ぐことができます。
posted by キヨ at 20:53| Comment(0) | TrackBack(0) | SQLServer