2016-09-12 19 views
3

、私は非常に高価なSQLビューを呼び出しているクローズドソースのASP.NETシステムを持っているとの見解を置き換える:SQL Serverがストアドプロシージャ

SELECT TOP 100 PERCENT * 
FROM [v] 
WHERE [u] = 9999 
ORDER BY [ID] 

私はデータベースへのアクセス権を持っているので、私はビューを変更することができます - ビューをより速くする簡単な方法はありません。

どのIISサーバーが要求を実行しているかに基づいて、プログラムのビューの動作を変更したいと考えています。

これは可能ですか?

など。ビューから呼び出されるストアドプロシージャを作成したいと思います。このストアドプロシージャは現在のビューを模倣したテーブルを返しますが、特定のIISサーバーから呼び出された場合は別のものが返されます。

asp.netコードを変更する必要がないようにストアドプロシージャを呼び出すようにビューを変更することはできますか?

他のスタックオーバーフローの記事からビューからストアドプロシージャを呼び出す方法はありますが、ストアドプロシージャ内のwhere句にはどのようにアクセスできますか?

+1

「ビューからストアドプロシージャを呼び出す」とはどういう意味ですか?それはまったく意味がありません。ビューの代わりにストアドプロシージャを使用すると、これを魔法のように速くすることはありません。適切なインデックス作成を追加する可能性が最も高くなります。テーブルとインデックスの定義を投稿してください。 –

+0

「トップ100パーセントを選ぶ」?これはまずは​​愚かです。内側のビューからprocsを呼び出すことができます(したがって、前のコメント)。ストアドプロシージャを作成してサーバー名を渡し、そのパラメータに基づいて異なる選択を実行することができます。ビューの代わりにプロシージャを呼び出すには、.NETコードを変更する必要があります。短い答え、あなたがしようとしていることは私の知るところでは実現できません。 –

+0

ビューは、SQLがクエリのロジックをカプセル化するという点で、テーブルに似た処理(多くの例外)を行う構造化クエリです。ビューの構造を変更するprocを呼び出すことはできませんが(それはビューではありません)、procを使って必要なように動作するクエリを返すことができます。私はあなたが永続的なクエリが必要なのかという疑問を思いますか?必要なレポート作成ツールがありますか?また、次回はDDLに関してMSDNに相談してください。この[クエリ対ビュー](http://stackoverflow.com/questions/324177/query-vs-view)は良いですが –

答えて

0

あなたのASP.NETコードはおそらくそれに埋め込まれた[ビュー]コードSELECT * FROMを持っており、あなたはそれを変更できないことを考えると、あなたは次のハードルがあります

  1. をあなたはマルチを作成する必要があります(例えば、ユーザーまたはサービスアカウント、IPアドレスを調べる)アプリケーションからの調整済みの入力なしで、照会しているIISインスタンスを検出できるステートメントテーブル値関数です。複数ステートメントのテーブル値ビューを使用する利点は、実際には2つの別々のSelectステートメントを作成し、条件付きでどちらか一方を返すことができることです。ストアドプロシージャでもこれを行うことができますが、ストアドプロシージャよりもビューからマルチステートメントのテーブル値関数を呼び出す方が簡単だと思います。

  2. 新しいマルチステートメントのテーブル値関数からSelect *を実行するには、ビューを変更する必要があります。

警告

、あなたのアプリケーションが利用するビューの定義を変更した場合、あなたはまた、それをアクセスする他のユーザーまたはアプリケーションのビューを変更します。 Hereは、誰が特定のビューをどのように使用していたか、どのくらい頻繁に参照しているかを調べる方法についての議論です。基になるコードを変更すると、他のアプリケーションが壊れる可能性があるため、そのビューから取り除かれている他のアプリケーションやレポートツールがあるかどうかを調べることをおすすめします。

関連する問題