1

施設のテーブルと伝送のテーブルがあります。たとえば、施設 X は 2011 年 4 月に 10124321409 回の送信を行い、そのうち 9959 回には SSN がありませんでした。これらは巨大なテーブルであるため、これらの計算値を「キャッシュ」テーブルに保存して、ユーザーが UI でシステムを調べたときに簡単にアクセスできるようにします (たとえば、日付範囲を選択します)。このように、施設名と日付範囲を取り、値を計算するユーザー定義関数がたくさんあります

 set @s = dbo.getPctMissingSSNs(facilityX, 1/1/2012, 1/15/2012) //returns pct missing ssn from 1/1/12 to 1/15/12 at facilityX

スタックオーバーフローから、私はそれを学びました

  1. テーブルの行をループするのは悪い考えです テーブルの行をループする最良の方法は何ですか?
  2. このような計算は、サーバーからクライアントにデータを呼び出して値を計算し、出力をサーバーのキャッシュにアップロードするよりも、ストアド プロシージャを使用して行う方が適切です。

(1) T-SQL の行をループする (悪い) または (2) VB.net の行をループしてダウンロードすることなく、各施設のキャッシュを多数の日付範囲で更新できる方法はありますか?サーバーからの値を取得してから、もう一度アップロードします (これも悪いことです)。

4

1 に答える 1

1

更新クエリを使用します。T-SQL は、フィールドの名前を入力パラメーターとして解釈します。したがって、facilityName フィールドと cacheValue フィールドの 2 つの列を持つテーブルがある場合、次のようにして cacheValue フィールドを更新し、scalarUserDefinedFunction(facilityName) と等しくなるようにすることができます。

Update cacheTable set cacheValue=scalarUserDefinedFunction(cacheTable.FacilityName)
于 2012-04-18T01:00:17.990 に答える