web-dev-qa-db-ja.com

SQL Server Management Studio – TSQLコーディングプロセスを改善するためのヒント

以前は、ペアプログラミングを使用するのが一般的な慣習であった場所で働いていました。コードで一緒に作業するとき、私たちが互いに学ぶことができる小さなことをいくつも覚えています。新しいショートカット、コードスニペットなどを時間をかけてピックアップすると、コードの記述効率が大幅に向上しました。

SQL Serverでの作業を開始してから、私は自分で取り残されました。私が今はできない他の人と一緒に働くことから私が通常選ぶ最高の習慣。

そこで質問があります:

  • SQL Server Management Studioを使用してTSQLコードを効率的に記述するためのヒントは何ですか?
  • コーディングの速度を向上させると思われる2〜3つのこと/ショートカットへのヒントを守ってください。
  • TSQLおよびSQL Server Management Studio 2005/2008の範囲内にとどまってください。機能がManagement Studioのバージョンに固有の場合は、次のように指定してください。 「SQL Server 2008のみで動作します」

編集:

私はあなた方の何人かに誤解されたのではないかと心配しています。効率的なTSQLコードを記述するためのヒントを探しているのではなく、Management Studioを効率的に使用してコーディングプロセス自体を高速化する方法に関するアドバイスを探しています。

私が探している答えのタイプは次のとおりです。

  • テンプレートの使用、
  • キーボードショートカット、
  • intelliSenseプラグインなどの使用.

基本的に、コーディング体験をもう少し効率的で快適にする小さなことです。

42
kristof

コミュニティ所有のWiki回答-コメントを編集または追加してください。

キーボードショートカット

  • F5、 CTRL + E または ALT + X -現在選択されているTSQLコードを実行する
  • CTRL + R –結果ペインの表示/非表示
  • CTRL + N –新しいクエリウィンドウを開く
  • CTRL + L –クエリ実行プランの表示

ショートカットの編集

  • CTRL + K + C そして CTRL + K + U -選択したコードブロックのコメント/コメント解除(Unslicedが推奨)
  • CTRL + SHIFT + U そして CTRL + SHIFT + L -選択したテキストを大文字/小文字に変更します
  • SHIFT + ALT +テキストの選択-テキストの長方形ブロックを選択/切り取り/コピー/貼り付け

アドオン

その他のヒント

  • カンマプレフィックススタイルの使用(Cade Rouxが推奨)
  • キーボードアクセラレータの使用(kcrumleyが推奨)

便利なリンク

24
kristof

Red GateのSQLプロンプト をご覧ください-これは素晴らしい製品です(Red Gateの貢献のほとんどがそうです)

SQL Inform は、手に負えない場合がある長いプロシージャをフォーマットするための優れた無料(オンライン)ツールでもあります。

それとは別に、私は痛みを伴う経験から、任意の前に(DELETEaBEGIN TRANSACTION。ステートメントが必要なものだけを削除していることを確認したら、COMMITを実行できます。

何度も私を救った;-)

27
Galwegian

SQLプロンプトの場合は+1。

私が見たことがないと思う本当にシンプルなもの-ほぼすべてのSQL環境(および他の言語でも)で動作します:

12年のSQLコーディングの後、最近、SSMSで生成されたコードでカンマプレフィックススタイルに変換した後、非常に効率的であることがわかりました。特に私の生産性を大幅に向上させたので、このスタイルを見たことがないことに非常に驚きました。

SELECT
t.a
,t.b
,t.c
,t.d
FROM t

選択リスト、パラメーターリスト、リストごとの順序、リストごとのグループなどの編集が本当に簡単になります。アンドペースト操作-ほとんどの場合、末尾にコンマを追加すると、カーソルをさらに移動する必要があるため、簡単に機能すると思います。

それを試してください、あなたは驚かれることでしょう-私はそうでした。

19
Cade Roux

私のお気に入りのクイックヒントは、オブジェクトエクスプローラーでテーブル名を展開すると、Word列をクエリ画面にドラッグするだけで、テーブル内のすべての列のリストがクエリに追加されるということです。不要なものを入力するよりも、不要なものを削除する方がはるかに簡単で、とても簡単です。人々が本当にひどいselect *構文を使用するのを防ぎます。そして、タイプミスを防ぎます。もちろん、列を個別にドラッグすることもできます。

13
HLGEM

クエリ内のエンティティを強調表示して押す ALT + F1 sp_helpを実行して、列、インデックス、パラメータなどの内訳を表示します。

13
Luke Bennett

可能な限り最小のデータ型を常に使用し、クエリで最も使用されるすべてのフィールドにインデックスを付けるようにしてください。

サーバー側のカーソルをできるだけ避けるようにしてください。データへのアクセスと操作のために、「手続き型アプローチ」ではなく、常に「セットベースのアプローチ」に固執します。多くの場合、カーソルは、代わりにSELECTステートメントを使用することで回避できます。

クエリを分析するには、常にクエリアナライザーのグラフィカルな実行プランまたはSHOWPLAN_TEXTまたはSHOWPLAN_ALLコマンドを使用します。クエリが「インデックススキャン」または「テーブルスキャン」の代わりに「インデックスシーク」を実行することを確認します。テーブルスキャンまたはインデックススキャンは非常に悪いことであり、可能な場合は避ける必要があります。適切な列で適切なインデックスを選択します。古いスタイルの結合の代わりに、読みやすいANSI標準の結合句を使用します。 ANSI結合では、WHERE句はデータのフィルタリングにのみ使用されます。古いスタイルの結合と同様に、WHERE句は結合条件とフィルタリングデータの両方を処理します。

フロントエンドアプリケーションで、SELECTステートメントまたはINSERT/UPDATE/DELETEステートメントを使用してデータを直接クエリ/操作しないでください。代わりに、ストアドプロシージャを作成し、アプリケーションがこれらのストアドプロシージャにアクセスできるようにします。これにより、アプリケーションのすべてのモジュールでデータアクセスがクリーンで一貫性が保たれ、同時にデータベース内のビジネスロジックが集中化されます。

ストアドプロシージャについては、ストアドプロシージャ名の前に「sp_」を付けないでください。プレフィックスsp_は、SQL Serverに付属のシステムストアドプロシージャ用に予約されています。 SQL Serverは、sp_で始まるプロシージャ名を見つけると、最初にmasterデータベースでプロシージャを見つけようとし、次に指定された修飾子(データベース、所有者)を探し、所有者としてdboを試します。そのため、「sp_」プレフィックスを回避することで、ストアドプロシージャの検索時間を大幅に節約できます。

動的SQLステートメントはできるだけ避けてください。 SQL Serverは実行時に毎回実行計画を生成する必要があるため、動的SQLは静的SQLよりも遅くなる傾向があります。

可能な場合は、統合認証を使用してください。これは、saおよびその他のSQLユーザーを忘れ、Microsoftユーザープロビジョニングインフラストラクチャを使用し、必要なすべてのパッチでSQLサーバーを常に最新の状態に保つことを意味します。マイクロソフトは、パッチの開発、テスト、およびリリースをうまく行っていますが、それを適用するのはあなたの仕事です。

Amazon.comの本で良いレビューが付いている本を検索して購入してください!

8
VP.

CTRL + I インクリメンタル検索 の場合。ヒット F3 または CTRL + I 結果を循環します。

6
Reddy

キーボードアクセラレータ。作成するクエリの種類を把握したら、ユーティリティストアドプロシージャを作成してタスクを自動化し、キーボードショートカットにマップします。たとえば、 この記事 は、そのテーブルからサンプルデータを簡単に確認するたびに「select top 10 * from SomeBigTable」と入力するのを避ける方法について説明しています。この手順の大幅に拡張されたバージョンを持っています CTRL + 5
さらにいくつかあります:

  1. CTRL + :テーブルのデータ、またはproc、UDF、またはビューの定義をすばやくスクリプト化する
  2. CTRL + 9:名前に特定の文字列が含まれるオブジェクトを検索します(名前に「Option」が含まれるプロシージャが存在するが、その名前が何で始まるかわからない場合)
  3. CTRL + 7:コードに特定の文字列を含むproc、UDF、またはビューを検索します
  4. CTRL + 4:指定された名前の列を持つすべてのテーブルを検索します

...そして、今気になっていないその他のいくつか。これらのことのいくつかは、SSMSの既存のインターフェイスを介して実行できますが、特にインターネット経由でサーバーに対してクエリを実行している場合、SSMSのウィンドウとウィジェットのロードが少し遅くなる可能性があります。とにかくキーボード。

5
Kevin Crumley

テーブルのオブジェクトエクスプローラーの列ノードからドラッグすると、クエリウィンドウに列のCSVリストが表示されます

5
gbn

ほんの小さなもの-長方形の選択 ALT + DRAGは、コピーのために非常に便利です+垂直に整列した列リストを貼り付けます(たとえば、大規模なUPDATEを手動で書き込む場合)。 TSQLを書くことは、私がそれを使うのはこれが唯一の時です!

5
Jon M

サブクエリの場合

オブジェクトエクスプローラー>テーブルを右クリック> [スクリプトテーブル]> [選択先]> [クリップボード]

次に、それをサブクエリとして必要なセクションに貼り付けることができます。

テンプレート/スニペット

コードスニペットのみで独自のテンプレートを作成します。次に、テンプレートを新しいドキュメントとして開く代わりに、現在のクエリにドラッグしてスニペットを挿入します。

スニペットは、単にコメント付きのヘッダーのセットまたは単なるコードの一部になります。

暗黙的なトランザクション

削除ステートメントの前にトランザクションを開始することを忘れない場合は、オプションに移動し、すべてのクエリでデフォルトで暗黙的なトランザクションを設定できます。常に明示的なコミット/ロールバックが必要です。

分離レベル

オプションに移動し、デフォルトで分離レベルをREAD_UNCOMMITEDに設定します。このように、すべてのアドホッククエリでNOLOCKを入力する必要はありません。新しいビューまたはストアドプロシージャを記述するときに、テーブルヒントを配置することを忘れないでください。

デフォルトのデータベース

ログインには、DBAによって設定されたデフォルトのデータベースがあります(通常、私にとってはほとんどの場合、望ましくないデータベースです)。

現在作業中のプロジェクトのために、別のものにしたい場合。

「登録済みサーバー」ペインで、右クリック>「プロパティー」>「接続プロパティー」タブ>「データベースに接続」。

複数ログイン

(ただし、これらは既に行っている可能性があります)

それぞれ異なるログインでサーバーを複数回登録します。その後、オブジェクトブラウザで同じサーバーを複数回(それぞれ異なるログインで)開くことができます。

別のログインですでに記述した同じクエリを実行するには、クエリをコピーする代わりに、クエリペイン>接続>接続の変更を右クリックします。

4
Ricardo C

名前の一部のテキストから特定のオブジェクト(テーブル、ストアドプロシージャなど)をすばやく検索したり、特定のスキーマに属するオブジェクトを検索するには、オブジェクトエクスプローラーの[フィルター]ボタンを使用します。

4
ptilton

私がやっていることの精度を向上させるのに役立つもう1つのことは、実際には管理スタジオのヒントではなく、t-sql自体を使用することです。

更新ステートメントまたは削除ステートメントを初めて記述するときは常に、selectをそのステートメントに組み込み、どのレコードが影響を受けるかを確認できるようにします。

例:

select t1.field1,t2.field2
--update t
--set field1 = t2.field2 
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

select t1.* 
--delete t1
from mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 = 'test'

(ここでは説明のためにここでselect *を使用しました。通常、クエリが正しいことを確認するために必要ないくつかのフィールドのみを選択します。時々、結合内の他のテーブルのフィールドと、削除して、結合が意図したとおりに機能したことを確認します)

このコードを実行する場合、最初にselectを実行して正しいことを確認してから、select行をコメント化して、削除または更新部分のコメントを外します。このようにすることで、チェックする前に誤って削除または更新を実行することはありません。また、この構文を使用して選択のコメントを外して実行すると、発生する可能性のあるデータベーステーブル内のすべてのレコードが更新によって更新される原因となる選択をコメントアウトすることを忘れる問題を回避できます。

select t1.field1,t2.field2
update t
set field1 = t2.field2 
--select t1.field1,t2.field2
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

上記の例からわかるように、選択のコメントを外して再コメントを忘れると、テーブル全体を更新したばかりで、更新を実行したいと思ったときに選択を実行したことになります。今週私のオフィスで誰かがそれを行ったので、すべてのクライアントのうち一人だけがクライアントのウェブサイトにログインできました。したがって、これを行わないでください。

4
HLGEM

毎晩、各オブジェクト(テーブル、sprocなど)をファイルに書き込むスケジュールされたタスクがあります。出力ディレクトリに全文検索インデックスを設定しているので、DBのどこかに埋め込まれている特定の文字列(たとえば、定数)を探しているときに、非常にすばやく見つけることができます。

Management Studio内で、[タスク]> [スクリプトの生成...]コマンドを使用して、これを実行する方法を確認できます。

3
Justin R.

キーボードショートカットを設定するのが好きです CTRL + F1 sp_helptextとして。これにより、ストアドプロシージャを強調表示し、そのコードをすばやく確認できます。私はそれがデフォルトを補完する素敵なものだと思う ALT + F1 sp_helpショートカット。

3
scott

私は、SSMS2008/R2向けに最近リリースされたSSMSBoostアドインの開発者です。その目的は、日常の日常業務をスピードアップする追加機能を追加することでした。

ショートカット: F2 SQL Editorで):untedカーソルにあるスクリプトオブジェクト

CTRL + F2 -(SQLエディター内):オブジェクトエクスプローラーのカーソルの下にあるオブジェクトを見つけてフォーカスします

また、SSMSBoostはボタン付きのツールバーを追加します。

  • オブジェクトエクスプローラーへのSQLエディター接続の同期(オブジェクトエクスプローラーで現在のデータベースにフォーカス)
  • 独自の優先接続を管理し、コンボボックスを介してそれらを切り替えます(サーバー間のジャンプを含む)
  • 自動置換:「---(sel」と入力すると、select * fromまた、独自のトークン置換ペアを追加することもできます
  • その他の便利な機能

SSMSBoost toolbar

2

クエリデザイナーを表示します CTRL + SHIFT + Q

2
Peter Gfader

SQLスクリプトの標準を作成し、それに従うことをお勧めします。また、テンプレートを使用して、さまざまな種類のストアドプロシージャと関数をすばやく作成します。 SQL Server 2005 Management Studioのテンプレートに関する質問です

SQL Server 2005 Management StudioでSQL Server 2005ストアドプロシージャテンプレートを作成する方法

2
Chris Woodruff

何らかのAPIのために多くのsprocを記述する必要がある場合。私がプログラマーだったときに書いたこのツールが好きかもしれません。たとえば、挿入/更新用にsprocを作成し、別のsprocを削除する必要がある200列のテーブルがあるとします。アプリケーションがテーブルに直接アクセスしたくないためです。宣言部分だけは退屈な作業になりますが、コードの一部があなたのために書かれている場合はそうではありません。以下に例を示します...

CREATE PROC upsert_Table1(@col1 int, @col2 varchar(200), @col3 float, etc.)
AS
BEGIN
  UPDATE table1 SET col1 = @col1, col2 = @col2, col3 = @col3, etc.
  IF @@error <> 0
    INSERT Table1 (col1, col2, col3, etc.)
    VALUES(@col1, @col2, @col3, etc.)
END
GO
CREATE PROC delete_Table1(@col1)
AS DELETE FROM Table1 WHERE col1 = @col1

http://snipplr.com/view/13451/spcoldefinition-or-writing-upsert-sp-in-a-snap/

注:2002年に作成された元のコードと記事にアクセスすることもできます(今は古くなっています!)
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=549&lngWId=5

1
PollusB

を使用して TAB ハイライトされたテキストにインデントします。コードを読みやすい形式に簡単に配置するのに便利です。また、 SHIFT + TAB インデントを解除します。

1
Joe Phillips

DevartのSQL Complete Express EditionはSSMSアドオンであり、無料で便利なアドオンです。必要なコードフォーマットとインテリセンス機能を提供します。

SSMSToolsPackアドオンも使用しますが、非常に優れています。私は愛してる;

  1. これは、コードスニペットの短いキーを作成できるSQLスニペットであり、これらのキーを入力してEnterキーを押すと自動的に追加されます。
  2. 履歴を検索して、数か月前に実行して忘れてしまったクエリを取得し、私の時間を大幅に節約しました。
  3. 最後のセッションを復元します。現在、ウィンドウを再起動するだけでクエリを保存することはありません。最後のセッションを復元をクリックすると、最後のセッションが取得および復元され、接続が自動的に作成されます。
  4. クエリ結果から挿入ステートメントを作成します(非常に便利です)。このアドオンが大好きです。

最近導入された小さなキャッチ。 SSMSToolsPackは、SSMS 2012ではもう無料ではありません。SSMS2005およびSSMS 2008では、まだ無料ですまだ。 SSMS 2012に移行するときに購入したい場合にのみ使用してください。そうでない場合は、SSMS 2012から離脱することをお勧めします。

1

現在のクエリを実行するF5は簡単な勝利です。その後、一般的なMSエディターコマンド CTRL + K + C 選択したテキストをコメントアウトしてから CTRL + K + U コメントを外します。

1
Unsliced

ブックマークを使用すると、非常に長い手順で作業を行ったりトラブルシューティングを行ったりする場合に、健全性を保つことができます。外部クエリで派生フィールドを使用しており、その定義が内部クエリ内でさらに200行下にあるとします。両方の場所をブックマークして、2つの場所をすばやく行き来できます。

1
traughber

エラーのキャッチにTRY/CATCH機能を使用します。

Adam MachanicのエキスパートSQL Server 2005プログラミングは、確かなテクニックと実践のための優れたリソースです。

ストアドプロシージャの所有権チェーンを使用します。

スキーマを使用して、データのセキュリティとロールを実施します。

1

テーブルを表示するには、オブジェクトエクスプローラの代わりにオブジェクトエクスプローラの詳細を使用します。これにより、文字を押して、その文字のプレフィックスを持つ最初のテーブルに移動できます。

1
Nathan Koop

開発者と一緒に作業する場合、多くの場合、1行の長いコードとしてフォーマットされたコードのスライバーを取得します。SQLServer Management StudioのSQLプリティプリンターアドオンは、60以上のフォーマッターオプションで役立ちます。 http://www.dpriver.com/sqlpp/ssmsaddin.html

1
James
  • ALT+SHIFT +選択

これは最近発見した素晴らしいものです-改行に関係なくテキストの長方形のセクションを選択できます。サブクエリまたはリストをすばやくクリップアウトするのに非常に便利です。

1
JNK

SQL Server Management Studioで使用できる2つの(?)種類のウィンドウに注意してください。

テーブルを右クリックしてOpenを選択すると、セルを変更できる編集可能なグリッドが使用されます。データベースを右クリックしてNew Queryを選択すると、わずかに異なるタイプが作成されますグリッドを変更することはできませんが、さまざまなコードスニペットを許可し、選択によってそれらを個別に実行できるなど、他のいくつかの素敵な機能を提供します。

0
Joe Phillips

使う SELECT INTOクエリを使用して、バックアップテーブルをすばやく/簡単に作成し、動作させて実験します。

0
Joe Phillips

Red GateのSQLプロンプトをお勧めします。自動検出(テーブル、ストアドプロシージャ、関数、およびネイティブ関数のインテリセンス)は、驚くばかりです! :)

ただし、価格が付いています。モノのフリーウェア版はありません。

0
cllpse