次の場合に使用する方が良いと混乱します。 報告目的で使用される非常に複雑なクエリがあります。簡易版はインラインテーブル値関数とストアドプロシージャ(SQL Server)
SELECT [type], COUNT(*) as total_num, COUNT(DISTINCT user_id) as uq_user_num
FROM table1
INNER JOIN table2 ON (...)
...
WHERE table3.last_action_date BETWEEN :start_date AND :end_date
GROUP BY [type]
ように私は、インライン関数やSTART_DATEとend_parametersを取り、このクエリを実行するストアドプロシージャを作成することができます見えます。
このタスクはデータの変更や複雑なロジックが含まれていないため、私は機能しません。また、後でAPPLY
の結果を使用することもできます(現時点ではそれほど重要ではありません)。
プロシージャではなく関数を使用するのは意味がありますか?パフォーマンスの観点(実行プランのキャッシュなど)との違いはありますか?
ありがとうございます。
表示が機能しない - 結果をフィルタリングしてグループ化する必要があります。私の知る限り、表示するパラメータを渡す方法はありません – a1ex07
質問を投稿する前にそのリンクを見ました。関数と手続きの違いについての良い情報がありますが、あまりにも一般的です。また、現時点では、 'SELECT'の中でプロシージャを呼び出すことにはまったく関心がありません。もし私がそうする必要があれば、私はいつもテーブル変数を宣言し、INSERT INTO ... EXECUTEでそれを設定し、変数を使用することができます。 – a1ex07