主にC#を書く開発者として、私はC#コードを書くときにいくつかの良い方法を採用しました。ストアドプロシージャを書くときに、ストアドプロシージャコードにそれらのプラクティスを適用することができません。ストアドプロシージャを構築するベストプラクティス
いくつかの機会に私は悪夢のストアドプロシージャコード、最初の3つまたは4つのテンポラリテーブルを設定し、お互いを主に呼び出すストアドプロシージャのレイヤーを継承しています。実際の作業は完了せず、ほんの数行のコードが必要です。最後に、最終的なストアドプロシージャ、3000-5000行のSQLコードの大きなモンスターが呼び出されます。そのコードには通常、コードの複製、複雑な制御フロー(別名スパゲッティ)、お互いの後ろに積み重ねる方法があります。これは、作業が始まり、終了する場所が明確に分離されていません。除数としてのコメント)。
私はまた、中間の一時テーブルから選択したコメント付きのselectステートメントの使用に気付きました。選択はデバッグの目的でオンに戻すことができますが、返された結果セットの特定の順序を期待する呼び出しコードの前に削除する必要があります。
明らかに私の仲間のチームメイトは、良いSQL文章の練習ができていないことを明らかに示しています。
...(ここでは本当の疑問があります)...モジュール式の保守可能なストアドプロシージャを書くための良いプラクティスは何ですか?
本物のプラクティスと書籍/ブログへの参照はどちらも歓迎します。特定のタスクに役立つツールとツールだけでなく、
、私はアセンブリを使用、私はC#で良いプラクティス
- モジュール化とカプセル化(一時テーブルを介した手続き通信行くには本当に道保存されている?)
- を発見していない一部の地域をまとめたクラスますこれを実現するアクセス修飾子で装飾されたメソッド
- のデバッグ/テスト(デバッグのターゲットを変更するよりも良い?)
- デバッグツールは?
- トレースをデバッグしますか?
- テストフィクスチャ? C#でコードを使用してコード
- の構造をコード/ロジック/データ/制御フローを強調
- Iはリファクタリング、それぞれただ一つの論理タスクを行い小さい方法を抜け出します。
- コードの重複
は、ほとんど私がDBMSとしてSQL Serverが発生したが、他のDBMSの機能を指摘とらわれない答えも回答DBMS:上記の例ではその助けESも歓迎されています。
いくつかの背景:私が遭遇した大規模なストアドプロシージャの大部分は、大規模なテーブルからいくつかのサマリー値を作成するというレポート作成シナリオにあります。しかし、ある例外テーブルにある値の一部を除外する必要がある場合、昨年と比較して、まだ完成していないテーブルの値をいくつか追加してください(製品を変更する醜いコードを想像できますか?年間?)など
SCMでストアドプロシージャを使用できないことと同様に、最も必要で明白な使用法(トリガなど)以外はすべて避けています。ビジネスロジックをビジネスレイヤー(.NET)に保ち、そのためのデータベース(データベース)を使用します。 – gahooa
理想的には、ストアドプロシージャは他のストアドプロシージャを呼び出すべきではありません。それがBL層のためのものです。残念ながら、ネストされたSPコールでいっぱいのデータベースを既に持っているなら、その感情は本当に役に立ちません。現在のモデルをよりメンテナンス可能にする方法や、ベストプラクティスをより良くフォローするためにシステムをリファクタリングする方法に関するアドバイスを探していますか? –
@gahooa大量のコードベースを継承したり、膨大な量のデータを格納しているときなど、ストアドストアでは多かれ少なかれ、.NETでできるだけ多くのものを置いています(これは私のホームアリーナです)。手続き –