
SQL Server Management Studioで作業する場合、無料のRedgate SQL Searchを含むRedgateのユーティリティが大好きです。
すべては問題ありませんが、オブジェクトツリーに独自のフォルダーを作成し、そこにサイン/プロシージャを配置できるようにする正気のツールを夢見ていました。
ある時点で、SQLTreeOが表示されましたが、その後、問題に遭遇しました-SQLSearchは、作成したフォルダーを検索していません。
実際には、これがアドインの小さなアドイン-SQLSearch Extenderの始まりです。 さらに、Redgateはユーザーの要望を急いで実装していないため、このような酒がなくなったので、機能を最大限に追加してみませんか。
SQLSearch機能に追加されるもの([ツール]-> [SQL Search Extender]メニューの設定):
- SQLTreeOによって作成された検索フォルダー
- 正規表現検索
- コードの強調表示と行番号、入力ナビゲーション
- テーブルスクリプトとCLR UDFを表示します
- 名前による検索からオブジェクトを除外するフィルター(sp_MS%、%__ tempなど)
- ...あらゆる種類の追加チップ
実際、開発ノート。
SSMSのAPI Microsoftは広告を出しません。最初は、次の記事が大いに役立ちました-
SQL Server Management Studio 2005のアドインとSQL 2008r2 を書くブラックアートが ssmsアドインを破壊
幸福のために必要なほとんどすべてがこれらの記事に記載されています、私はいくつかの点に注意します
瞬間1. SQLSearchウィンドウをキャッチします。
最初はほとんど情報がないため、Connect.OnCmdUIContextChangedのハンドラーを切断し、WinAPI EnumChildWindowsを呼び出します。 深い内的満足で、UserControlからの相続人が目的のウィンドウ内にあることがわかり、タイプと名前(必要に応じてHawkeye )で必要な要素を見つけます。 次に、インターフェイスで必要なことを行います。
瞬間2. SQLTreeOフォルダーを検索する
アイデアは簡単です-SQLSearchが検索を完了した後、オブジェクトエクスプローラーで選択された要素を見て、その名前が目的の要素と一致しない場合、サーバーノードレベルに移動してフォルダーを検索します。
瞬間3.構文の強調表示。
SQLSearchスクリプトは、標準のRichEditに出力されます。 上からスタジオ自体のエディター(キーワードのランダムリンク )でそれをカバーしたかったのですが、実際にはうまくいきましたが、あらゆる種類の小さなトラブルを調査して排除する忍耐がありませんでした。
その結果、彼は最も抵抗の少ない道を歩み、RichEditの背後に隠し、Microsoft.SqlServer.SqlParser.Parserの存在を覚え、スピードのためにRTFハンドルを形成しました。
瞬間4. [ツール]メニューに美しいアイコンが欲しい!
どんなにばかげても、ポップアップコンテキストメニューで問題なくこれを行うと、この場合は情報を見つけることができなかったので、それをいじる必要がありました。
瞬間5.検索regexp'amiが欲しい!
SQLSearch自体を変更せずにこれを行う方法が見つからなかったため、最初は悲しくなりましたが、解決策が見つかりました。
SQLSearchはSQLiteとその.NETラッパーを使用してSystem.Data.SQLiteをキャッシュし、データをキャッシュします。ライブラリは実際に検索を開始した時点でロードされます。 しかし、私たちは同じドメインにいて、検索を開始する前にウィンドウをキャッチするため、SQLiteライブラリをすばやく読み込むことができます。 System.Data.SQLiteソースコードをダウンロードし、バージョン番号とキーがSQLSearchが使用するものと一致することを確認し、System.Data.SQLite.SQLiteCommandを変更して、SQLクエリをキャッチし、必要なものを変更します。
正規表現による検索自体の実装は簡単であることが判明しました-SQLiteFunction属性でマークすることでライブラリにクラスを実装するだけで十分です-SQLite REGEXP関数 、その後、
select * from table where text REGEXP '.*GOOD\Z'
同じハックは、検索結果の最大数の制限を取り除くのに役立ちました-SQLSearchは出力を150件に制限します。
瞬間6.オブジェクトのスクリプトを取得します。
すべてが簡単です-Microsoft.SqlServer.Management.Smoが役立ちます
計画、just4fun、関連する.NET Reflectorを使用してCLR UDFソースを逆コンパイルして表示したいのですが、今のところ、
- アドイン自体は、3.5(SSMS要件)より古いバージョンの.NET Frameworkを使用する必要があり、.NET Reflectorは4.0未満ではありません。 (COMを通過...)
- .NETから.NETで記述されたCOMオブジェクトを呼び出すことは不可能です(バイパスされます...)
- そして、これはすべてテストバージョンで無効になり、動作した後、SSMSから起動するとCOMエラー8004003でクラッシュします。
MS Visual Studio 2010、.NET framework 3.5で作成され、Microsoft SQL Server Management Studio 10.0.1600.22(SQL Server 2008R2)でテストされました。
私はまだソースをアップロードしていませんが、ライブラリは何にも閉じられていません。コードの量は少なく、リフレクターがあれば実装を確認したい人は誰でも見ることができます。
参照:
ダウンロードする
FacebookのSQLSearchExtenderページ
SQLTreeOフォーラムに関する議論
2012.06.27更新
SSMS v.10.50でのクラッシュを修正しました。
それまでの間、本質と要点であるSQLSearchはRedgateのWebサイトでバージョン1.1.4.3から1.1.6.1に更新されており