sql >> データベース >  >> RDS >> Sqlserver

サーバー内のすべてのデータベースの参照ストアド プロシージャ

    この質問はすでに SO で何度も尋ねられていますが、興味深いことに、最良の答えについてはコンセンサスがないようです。そこで、さまざまな人々が提案した主なオプションの要約を以下に示します (順不同):

    <オール>
  1. sp_ を使用して master データベースに配置します SQL Server が最初に検索するためのプレフィックス
  2. モデル データベースに入れると、すべての新しい DB に自動的に追加されます
  3. 「グローバル」プロシージャ (およびその他のオブジェクト) 専用のデータベースを作成し、3 部構成の命名を使用してそれらを呼び出します
  4. 3 と同じですが、他のデータベースで同義語を作成して、3 部構成の命名が不要になるようにします
  5. 商用ツールまたは自社開発ツールを使用して、複数のデータベースへの導入を管理する
  6. 5 と同じですが、1 つのデータベースにデプロイしてから diff 差分スクリプトを適用して他のデータベースに展開
  7. 私の意見では、Microsoft が明示的に述べている master データベースにオブジェクトを作成しないでください。 2 は良さそうに聞こえますが、実際には、データベースは最初から作成されたもの (YMMV) よりも頻繁に復元またはコピーされるため、モデルの使用は信頼できません。

    3 と 4 はテーブルとビューには適していますが、ストアド プロシージャと関数では実行コンテキストが問題になる可能性があります。しかし、これは手順のロジックに依存し、あなたのケースでは実行可能かもしれません.

    しかし、1-4 にはすべて、オブジェクトが 1 つしかない場合、そのオブジェクトのバージョンも 1 つしかないという潜在的な問題があり、さまざまなバージョンをさまざまな DB で使用できるようにしたり、テストやさまざまな顧客のために利用したりするのに役立つことがよくあります.

    5 と 6 は同じテーマのバリエーションであり、個人的にはこれが最善のアプローチだと思います。展開はとにかく解決しなければならない問題だからです。そうすれば、知識、ツール、プロセスが整っていることを確認した方がよいでしょう。制御され自動化された方法で、コードをクリーンかつ迅速にデータベースにデプロイできるようになります。



    1. 同じテーブルの親/子

    2. SQLSERVER2008でデッドロックを取得するためのSQLクエリ

    3. MySQLに挿入できないのはなぜですか?

    4. MySQL LIMITはORDERBYの前または後に適用されますか?