SQL Server 2008 上の複数の (場合によってはすべての) データベースに対して 1 つの同じストアド プロシージャを作成したいと考えています。
一度に実行できますか、それともasp.netプロジェクト参照データベースで個別に作成する必要がありますか?
私を助けてください.....
SQL Server 2008 上の複数の (場合によってはすべての) データベースに対して 1 つの同じストアド プロシージャを作成したいと考えています。
一度に実行できますか、それともasp.netプロジェクト参照データベースで個別に作成する必要がありますか?
私を助けてください.....
この質問はすでに SO で何度も尋ねられていますが、興味深いことに、最良の答えについてはコンセンサスがないようです。そこで、さまざまな人々が提案した主なオプションの要約を以下に示します (順不同):
sp_
プレフィックスを付けて master データベースに配置し、SQL Server が最初に検索できるようにします。diff
データベースに diff スクリプトを適用して他のデータベースにデプロイします私の意見では、1 はスターターではありません。なぜなら、Microsoftは master データベースにオブジェクトを作成すべきではないと明示的に言っているからです。2 は良さそうに聞こえますが、実際には、データベースは最初から作成されたもの (YMMV) よりも頻繁に復元またはコピーされるため、モデルの使用は信頼できません。
3 と 4 はテーブルとビューには適していますが、ストアド プロシージャと関数では実行コンテキストが問題になる可能性があります。ただし、これは手順のロジックに依存し、場合によっては実行できる場合があります。
しかし、1 ~ 4 のいずれにも、オブジェクトが 1 つしかない場合、そのオブジェクトのバージョンが 1 つしかないという潜在的な問題があり、さまざまな DB でさまざまなバージョンを使用できるようにしたり、テストやさまざまな顧客向けに使用したりすると便利なことがよくあります。
5 と 6 は同じテーマのバリエーションであり、個人的にはこれが最善のアプローチだと思います。展開はとにかく解決しなければならない問題だからです。そうすれば、知識、ツール、プロセスが整っていることを確認した方がよいでしょう。制御された自動化された方法で、任意のデータベースにコードをクリーンかつ迅速にデプロイできます。
マスターデータベースまたは削除されないデータベースにストアドプロシージャを作成します。データを取得するデータベースを識別し、それに応じて残りの作業を行うストアドプロシージャにパラメータを渡します。