0

SQL Server 2008 上の複数の (場合によってはすべての) データベースに対して 1 つの同じストアド プロシージャを作成したいと考えています。

一度に実行できますか、それともasp.netプロジェクト参照データベースで個別に作成する必要がありますか?

私を助けてください.....

4

2 に答える 2

2

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

  1. sp_プレフィックスを付けて master データベースに配置し、SQL Server が最初に検索できるようにします。
  2. モデル データベースに配置すると、すべての新しい DB に自動的に追加されます
  3. 「グローバル」プロシージャ(およびその他のオブジェクト)専用のデータベースを作成し、3 部構成の命名を使用してそれらを呼び出します
  4. 3 と同じですが、他のデータベースで同義語を作成するため、3 部構成の命名は必要ありません
  5. 商用ツールまたは自社開発ツールを使用して、複数のデータベースへの展開を管理する
  6. 5 のように、ただし 1 つのデータベースにデプロイし、次にdiffデータベースに diff スクリプトを適用して他のデータベースにデプロイします

私の意見では、1 はスターターではありません。なぜなら、Microsoftは master データベースにオブジェクトを作成すべきではないと明示的に言っているからです。2 は良さそうに聞こえますが、実際には、データベースは最初から作成されたもの (YMMV) よりも頻繁に復元またはコピーされるため、モデルの使用は信頼できません。

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

しかし、1 ~ 4 のいずれにも、オブジェクトが 1 つしかない場合、そのオブジェクトのバージョンが 1 つしかないという潜在的な問題があり、さまざまな DB でさまざまなバージョンを使用できるようにしたり、テストやさまざまな顧客向けに使用したりすると便利なことがよくあります。

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

于 2012-06-22T13:03:57.227 に答える
0

マスターデータベースまたは削除されないデータベースにストアドプロシージャを作成します。データを取得するデータベースを識別し、それに応じて残りの作業を行うストアドプロシージャにパラメータを渡します。

于 2012-06-22T11:37:31.717 に答える