Community Open Day の反省点の一つとしてハンズオンに記載されているクエリの入力方法について、説明していなかった点があります。
今回の投稿では SQL Server Management Studio でできるだけ楽をしてクエリを各方法についてまとめてみたいと思います。
SQL Server Profiler やスクリプトを作成するボタンがついている操作を使用するというものもあるかと思いますが今回はそれ以外を使っています。
■テンプレートを使用
これは、以前からある機能ですね。
テンプレートエクスプローラーから用意されているテンプレートを使用してクエリを書くことができます。
テンプレートエクスプローラーでは基本的なクエリのテンプレートが用意されており、必要となる個所を埋めていくとクエリを完成させることができます。
これは、ストアドプロシージャのテンプレートですが SET NOCOUNT ON が入っていたりします。
テンプレートを見て、どのような書き方があるか勉強するのもよさそうですね。
■スニペットを使用
これは、SQL Server 2012 の Management Studio からの機能になります。
2012 の SSMS ではスニペットの挿入を使用することができます。
# 先程のテンプレートと同様、SSMS の機能なので接続先が SQL Server 2008 R2 等でも使用できます。
こちらもテンプレート同様に基本的な操作に関しては一通り用意されています。
テンプレートでは入力が必要となる個所が <> で括られていましたがスニペットではハイライト表示されます。
こちらのほうがどこを入力すればよいか一目瞭然ですね。
ハイライト表示されている個所を変更すると、関連する個所も自動で変更されるのでこちらのほうが入力が楽かと思います。
■インテリセンスを使用
クエリを書く際には、大抵インテリセンスを使用して記述していくことになると思います。
これは SQL Server 2008 以降 + SQL Server 2008 以降の SSMS で使用できるようになった機能となります。
インテリセンスはテーブル名や列名の最初のほうの文字だったり、 Ctrl + スペースを押すと表示されてきます。
SQL Server 2012 の SSMS ではインテリセンスが強化され、先頭の名称だけでなく、途中の名称を入力しても候補を表示してくれるようになりました。
# stats と入力すると stats ~ だけでなく ~ stats ~ が候補として表示されます。
これで DMV の一部分の名称しか覚えていなかった時も探すのがぐっと楽になりました。
# sys. と入力してからでないと予想していたものが表示されないことがありますので、スキーマ名修飾をしてからインテリセンスで候補に表示されるようにしたほうが良いかと思います。
インテリセンスを使用してクエリを記述する場合、
- FROM 句から先に書く
と楽をすることができます。
たとえば SELECT に含まれる列名から先に記述したとします。
この場合、 FROM 句が指定されていないため、列名をインテリセンスを使用して入力補完することができません。
FROM 句を先に入力した場合は、テーブルに含まれる列名の判断ができるようになった後ですので、列名を指定する際にインテリセンスを使用することができるようになります。
候補を選択して、Tab だったり Spase だったり Enter だったりカンマだったりを押すと確定できますので慣れると効率よくクエリを書いていくことが可能です。
インテリセンスですがクエリウィンドウを開いたときに作成されていたオブジェクトが対象とないます。
そのため、クエリウィンドウを開いたときに存在していなかったオブジェクトは存在しないということで下線が表示されます。
実際には存在しているので、クエリは影響なく実行ができるのですが、同じウィンドウを使用して作業をしていると少し気になりますよね。
このような場合は Ctrl + Shift + R を押すと最新の情報に更新され下線の表示が消えます。
この辺を知っているとクエリを書く際に楽をすることができるかと。
ハンズオンをするときにはこういう内容を補足資料として載せておくと普段 SSMS を使用されない方にも親切だったのだろうな~と。
SELECTやFROMといった句そのものは補完できないのでしょうか。自分の環境がおかしいのではないかと思っていろいろ調べていたのですが、そういう仕様なんでしょうか。ご存じでしたら教えていただけると幸いです。
惑星
9 4月 13 at 00:33
インテリセンスを使用した入力保管は列名や表名になります。
SELECT句やWHERE句の保管についてはテンプレートやスニペットを使用してベースになるクエリを自前で用意する方法になるかと。
Masayuki.Ozawa
10 4月 13 at 23:17
なるほど、よく分かりました。お答えいただいてありがとうございました。
惑星
10 4月 13 at 23:43