以前は、ペアプログラミングを使用するのが一般的な慣習であった場所で働いていました。コードで一緒に作業するとき、私たちが互いに学ぶことができる小さなことをいくつも覚えています。新しいショートカット、コードスニペットなどを時間をかけてピックアップすると、コードの記述効率が大幅に向上しました。
SQL Serverでの作業を開始してから、私は自分で取り残されました。私が今はできない他の人と一緒に働くことから私が通常選ぶ最高の習慣。
そこで質問があります:
編集:
私はあなた方の何人かに誤解されたのではないかと心配しています。効率的なTSQLコードを記述するためのヒントを探しているのではなく、Management Studioを効率的に使用してコーディングプロセス自体を高速化する方法に関するアドバイスを探しています。
私が探している答えのタイプは次のとおりです。
基本的に、コーディング体験をもう少し効率的で快適にする小さなことです。
コミュニティ所有のWiki回答-コメントを編集または追加してください。
キーボードショートカット
ショートカットの編集
アドオン
その他のヒント
便利なリンク
Red GateのSQLプロンプト をご覧ください-これは素晴らしい製品です(Red Gateの貢献のほとんどがそうです)
SQL Inform は、手に負えない場合がある長いプロシージャをフォーマットするための優れた無料(オンライン)ツールでもあります。
それとは別に、私は痛みを伴う経験から、任意の前に(DELETE
aBEGIN TRANSACTION
。ステートメントが必要なものだけを削除していることを確認したら、COMMIT
を実行できます。
何度も私を救った;-)
SQLプロンプトの場合は+1。
私が見たことがないと思う本当にシンプルなもの-ほぼすべてのSQL環境(および他の言語でも)で動作します:
12年のSQLコーディングの後、最近、SSMSで生成されたコードでカンマプレフィックススタイルに変換した後、非常に効率的であることがわかりました。特に私の生産性を大幅に向上させたので、このスタイルを見たことがないことに非常に驚きました。
SELECT
t.a
,t.b
,t.c
,t.d
FROM t
選択リスト、パラメーターリスト、リストごとの順序、リストごとのグループなどの編集が本当に簡単になります。アンドペースト操作-ほとんどの場合、末尾にコンマを追加すると、カーソルをさらに移動する必要があるため、簡単に機能すると思います。
それを試してください、あなたは驚かれることでしょう-私はそうでした。
私のお気に入りのクイックヒントは、オブジェクトエクスプローラーでテーブル名を展開すると、Word列をクエリ画面にドラッグするだけで、テーブル内のすべての列のリストがクエリに追加されるということです。不要なものを入力するよりも、不要なものを削除する方がはるかに簡単で、とても簡単です。人々が本当にひどいselect *構文を使用するのを防ぎます。そして、タイプミスを防ぎます。もちろん、列を個別にドラッグすることもできます。
クエリ内のエンティティを強調表示して押す ALT + F1 sp_helpを実行して、列、インデックス、パラメータなどの内訳を表示します。
可能な限り最小のデータ型を常に使用し、クエリで最も使用されるすべてのフィールドにインデックスを付けるようにしてください。
サーバー側のカーソルをできるだけ避けるようにしてください。データへのアクセスと操作のために、「手続き型アプローチ」ではなく、常に「セットベースのアプローチ」に固執します。多くの場合、カーソルは、代わりに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の本で良いレビューが付いている本を検索して購入してください!
CTRL + I インクリメンタル検索 の場合。ヒット F3 または CTRL + I 結果を循環します。
キーボードアクセラレータ。作成するクエリの種類を把握したら、ユーティリティストアドプロシージャを作成してタスクを自動化し、キーボードショートカットにマップします。たとえば、 この記事 は、そのテーブルからサンプルデータを簡単に確認するたびに「select top 10 * from SomeBigTable」と入力するのを避ける方法について説明しています。この手順の大幅に拡張されたバージョンを持っています CTRL + 5。
さらにいくつかあります:
...そして、今気になっていないその他のいくつか。これらのことのいくつかは、SSMSの既存のインターフェイスを介して実行できますが、特にインターネット経由でサーバーに対してクエリを実行している場合、SSMSのウィンドウとウィジェットのロードが少し遅くなる可能性があります。とにかくキーボード。
テーブルのオブジェクトエクスプローラーの列ノードからドラッグすると、クエリウィンドウに列のCSVリストが表示されます
ほんの小さなもの-長方形の選択 ALT + DRAG
は、コピーのために非常に便利です+垂直に整列した列リストを貼り付けます(たとえば、大規模なUPDATEを手動で書き込む場合)。 TSQLを書くことは、私がそれを使うのはこれが唯一の時です!
オブジェクトエクスプローラー>テーブルを右クリック> [スクリプトテーブル]> [選択先]> [クリップボード]
次に、それをサブクエリとして必要なセクションに貼り付けることができます。
コードスニペットのみで独自のテンプレートを作成します。次に、テンプレートを新しいドキュメントとして開く代わりに、現在のクエリにドラッグしてスニペットを挿入します。
スニペットは、単にコメント付きのヘッダーのセットまたは単なるコードの一部になります。
削除ステートメントの前にトランザクションを開始することを忘れない場合は、オプションに移動し、すべてのクエリでデフォルトで暗黙的なトランザクションを設定できます。常に明示的なコミット/ロールバックが必要です。
オプションに移動し、デフォルトで分離レベルをREAD_UNCOMMITEDに設定します。このように、すべてのアドホッククエリでNOLOCKを入力する必要はありません。新しいビューまたはストアドプロシージャを記述するときに、テーブルヒントを配置することを忘れないでください。
ログインには、DBAによって設定されたデフォルトのデータベースがあります(通常、私にとってはほとんどの場合、望ましくないデータベースです)。
現在作業中のプロジェクトのために、別のものにしたい場合。
「登録済みサーバー」ペインで、右クリック>「プロパティー」>「接続プロパティー」タブ>「データベースに接続」。
(ただし、これらは既に行っている可能性があります)
それぞれ異なるログインでサーバーを複数回登録します。その後、オブジェクトブラウザで同じサーバーを複数回(それぞれ異なるログインで)開くことができます。
別のログインですでに記述した同じクエリを実行するには、クエリをコピーする代わりに、クエリペイン>接続>接続の変更を右クリックします。
名前の一部のテキストから特定のオブジェクト(テーブル、ストアドプロシージャなど)をすばやく検索したり、特定のスキーマに属するオブジェクトを検索するには、オブジェクトエクスプローラーの[フィルター]ボタンを使用します。
私がやっていることの精度を向上させるのに役立つもう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
上記の例からわかるように、選択のコメントを外して再コメントを忘れると、テーブル全体を更新したばかりで、更新を実行したいと思ったときに選択を実行したことになります。今週私のオフィスで誰かがそれを行ったので、すべてのクライアントのうち一人だけがクライアントのウェブサイトにログインできました。したがって、これを行わないでください。
毎晩、各オブジェクト(テーブル、sprocなど)をファイルに書き込むスケジュールされたタスクがあります。出力ディレクトリに全文検索インデックスを設定しているので、DBのどこかに埋め込まれている特定の文字列(たとえば、定数)を探しているときに、非常にすばやく見つけることができます。
Management Studio内で、[タスク]> [スクリプトの生成...]コマンドを使用して、これを実行する方法を確認できます。
キーボードショートカットを設定するのが好きです CTRL + F1 sp_helptextとして。これにより、ストアドプロシージャを強調表示し、そのコードをすばやく確認できます。私はそれがデフォルトを補完する素敵なものだと思う ALT + F1 sp_helpショートカット。
私は、SSMS2008/R2向けに最近リリースされたSSMSBoostアドインの開発者です。その目的は、日常の日常業務をスピードアップする追加機能を追加することでした。
ショートカット: F2 SQL Editorで):untedカーソルにあるスクリプトオブジェクト
CTRL + F2 -(SQLエディター内):オブジェクトエクスプローラーのカーソルの下にあるオブジェクトを見つけてフォーカスします
また、SSMSBoostはボタン付きのツールバーを追加します。
select * from
また、独自のトークン置換ペアを追加することもできますクエリデザイナーを表示します CTRL + SHIFT + Q
SQLスクリプトの標準を作成し、それに従うことをお勧めします。また、テンプレートを使用して、さまざまな種類のストアドプロシージャと関数をすばやく作成します。 SQL Server 2005 Management Studioのテンプレートに関する質問です
SQL Server 2005 Management StudioでSQL Server 2005ストアドプロシージャテンプレートを作成する方法
何らかの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
を使用して TAB ハイライトされたテキストにインデントします。コードを読みやすい形式に簡単に配置するのに便利です。また、 SHIFT + TAB インデントを解除します。
DevartのSQL Complete Express EditionはSSMSアドオンであり、無料で便利なアドオンです。必要なコードフォーマットとインテリセンス機能を提供します。
SSMSToolsPack
アドオンも使用しますが、非常に優れています。私は愛してる;
最近導入された小さなキャッチ。 SSMSToolsPackは、SSMS 2012ではもう無料ではありません。SSMS2005およびSSMS 2008では、まだ無料ですまだ。 SSMS 2012に移行するときに購入したい場合にのみ使用してください。そうでない場合は、SSMS 2012から離脱することをお勧めします。
現在のクエリを実行するF5は簡単な勝利です。その後、一般的なMSエディターコマンド CTRL + K + C 選択したテキストをコメントアウトしてから CTRL + K + U コメントを外します。
ブックマークを使用すると、非常に長い手順で作業を行ったりトラブルシューティングを行ったりする場合に、健全性を保つことができます。外部クエリで派生フィールドを使用しており、その定義が内部クエリ内でさらに200行下にあるとします。両方の場所をブックマークして、2つの場所をすばやく行き来できます。
エラーのキャッチにTRY/CATCH機能を使用します。
Adam MachanicのエキスパートSQL Server 2005プログラミングは、確かなテクニックと実践のための優れたリソースです。
ストアドプロシージャの所有権チェーンを使用します。
スキーマを使用して、データのセキュリティとロールを実施します。
テーブルを表示するには、オブジェクトエクスプローラの代わりにオブジェクトエクスプローラの詳細を使用します。これにより、文字を押して、その文字のプレフィックスを持つ最初のテーブルに移動できます。
開発者と一緒に作業する場合、多くの場合、1行の長いコードとしてフォーマットされたコードのスライバーを取得します。SQLServer Management StudioのSQLプリティプリンターアドオンは、60以上のフォーマッターオプションで役立ちます。 http://www.dpriver.com/sqlpp/ssmsaddin.html
ALT+SHIFT
+選択これは最近発見した素晴らしいものです-改行に関係なくテキストの長方形のセクションを選択できます。サブクエリまたはリストをすばやくクリップアウトするのに非常に便利です。
SQL Server Management Studioで使用できる2つの(?)種類のウィンドウに注意してください。
テーブルを右クリックしてOpen
を選択すると、セルを変更できる編集可能なグリッドが使用されます。データベースを右クリックしてNew Query
を選択すると、わずかに異なるタイプが作成されますグリッドを変更することはできませんが、さまざまなコードスニペットを許可し、選択によってそれらを個別に実行できるなど、他のいくつかの素敵な機能を提供します。
使う SELECT INTO
クエリを使用して、バックアップテーブルをすばやく/簡単に作成し、動作させて実験します。
Red GateのSQLプロンプトをお勧めします。自動検出(テーブル、ストアドプロシージャ、関数、およびネイティブ関数のインテリセンス)は、驚くばかりです! :)
ただし、価格が付いています。モノのフリーウェア版はありません。