42

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

SQL Serverを使い始めてから、私は独り立ちしました。今はできない他の人と一緒に仕事をすることから、私が普段選ぶ最高の習慣。

だからここに質問があります:

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

編集:

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

私が探している答えの種類は次のとおりです。

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

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

4

30 に答える 30

27

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

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

それとは別に、私は苦痛な経験から、ステートメントの に。を付けるのは良いことだと学びました。ステートメントが必要なものだけを削除していることを確認したら、次のことができます。DELETE BEGIN TRANSACTIONCOMMIT

何度も私を救った;-)

于 2008-09-19T10:58:24.470 に答える
24

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

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

  • F5CTRL+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 による提案)

便利なリンク

于 2008-09-19T15:15:38.677 に答える
19

+1 SQL プロンプト。

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

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

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

これにより、選択リスト、パラメーター リスト、リストによる並べ替え、リストによるグループ化などを非常に簡単に編集できます。カット後にリストの末尾にコンマを追加したり削除したりする時間を大幅に削減できることがわかりました。アンドペースト操作 - ほとんどの場合、最後に何かを追加し、後置コンマを使用すると、カーソルをさらに移動する必要があるため、簡単に機能すると思います。

試してみてください。きっと驚かれることでしょう。

于 2008-09-19T22:08:27.470 に答える
13

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

于 2008-09-19T14:16:28.837 に答える
13

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

于 2008-09-23T07:57:23.800 に答える
8

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

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

Query Analyzer または 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 サーバーを常に最新の状態に保ちます。Microsoft はパッチの開発、テスト、リリースをうまく行っていますが、それを適用するのはあなたの仕事です。

amazon.com でレビューの良い本を検索して購入しましょう。

于 2008-09-19T11:47:52.717 に答える
5

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

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

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

于 2008-09-22T07:03:33.173 に答える
5

ほんの小さなもの - 長方形の選択ALT+DRAGは、垂直方向に整列された列リストをコピーして貼り付けるのに非常に便利です (たとえば、大規模な UPDATE を手動で作成する場合)。私が TSQL を使用するのは、TSQL を作成するときだけです。

于 2009-04-24T11:00:55.730 に答える
5

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

于 2012-01-25T18:11:24.673 に答える
4

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

于 2012-11-29T18:19:36.383 に答える
4

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

初めて update または delete ステートメントを作成するときはいつでも、影響を受けるレコードを確認できるように 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

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

于 2008-09-19T14:33:49.667 に答える
4

サブクエリの場合

オブジェクト エクスプローラー > テーブルを右クリック > Script table as > SELECT to > Clipboard

次に、サブクエリとして必要なセクションに貼り付けるだけです。

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

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

スニペットは、コメント付きの一連のヘッダーまたは単純なコードの一部にすることができます。

暗黙のトランザクション

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

分離レベル

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

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

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

現在取り組んでいるプロジェクトのために別のものにしたい場合。

[登録済みサーバー] ペインで > 右クリック > [プロパティ] > [接続プロパティ] タブ > データベースに接続します。

複数のログイン

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

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

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

于 2008-10-03T06:41:28.443 に答える
3

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

于 2009-03-12T04:48:00.493 に答える
2

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

How do you create SQL Server 2005 stored procedure templates in SQL Server 2005 Management Studio?

于 2008-09-19T11:03:04.350 に答える
2

+ +でクエリ デザイナーを表示するCTRLSHIFTQ

于 2009-03-12T04:37:06.243 に答える
2

私は、SSMS2008/R2 用に最近リリースされた SSMSBoost アドインの開発者です。その意図は、日常のルーチン タスクを高速化する機能を追加することでした。

ショートカット: F2- (SQL エディター内): カーソルのない場所にあるスクリプト オブジェクト

CTRL+ F2- (SQL エディターで): オブジェクト エクスプローラーでカーソルの下にあるオブジェクトを見つけてフォーカスします +SSMS2008 では不足しているショートカット エディターが含まれています (SSMS2012 で導入予定)

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

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

SSMSBoost ツールバー

于 2012-03-09T10:13:06.303 に答える
1

エラーキャッチにはTRY/CATCH機能を利用してください。

AdamMachanicのエキスパートSQLServer2005プログラミングは、確かな技術と実践のための優れたリソースです。

ストアドプロシージャには所有権の連鎖を使用します。

スキーマを利用して、データのセキュリティと役割を強化します。

于 2008-09-19T12:42:00.107 に答える
1

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

于 2009-05-15T17:50:22.907 に答える
1
  • ALT+SHIFT+ 選択

これは私が最近発見したすばらしいものです。改行に関係なく、テキストの長方形のセクションを選択できます。サブクエリやリストをすばやく切り出すのに非常に便利です。

于 2012-03-12T19:18:40.843 に答える
1

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

于 2011-03-30T17:24:00.567 に答える
1

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

于 2009-09-24T00:48:48.297 に答える
1

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

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

于 2012-05-31T05:49:47.833 に答える
1

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

于 2008-09-23T07:48:17.097 に答える
1

Devart の SQL Complete Express Edition は SSMS アドオンであり、無料で便利なアドオンです。非常に必要なコードの書式設定とインテリセンス機能を提供します。

私もSSMSToolsPackアドオンを使用していますが、とても良いです。私は愛してる;

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

最近導入された小さなキャッチ。SSMSToolsPack は、SSMS 2012 では無料ではなくなりました。SSMS 2005 と SSMS 2008 ではまだ無料です。SSMS 2012 に移行するときに購入する場合にのみ使用してください。

于 2011-12-08T10:02:33.340 に答える
0

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

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

于 2009-09-24T00:50:43.820 に答える
0

クエリを使用して、SELECT INTO作業および実験用のバックアップ テーブルをすばやく簡単に作成します。

于 2009-09-24T00:55:02.163 に答える
0

Red Gate の SQL Prompt を強くお勧めします。自動検出 (テーブル、ストアド プロシージャ、関数、およびネイティブ関数に対するインテリセンス) は素晴らしいものです。:)

しかし、それは価格が付属しています。このことのフリーウェア版はありません。

于 2008-09-23T10:22:57.583 に答える