2017-08-31 6 views
-3

私は動的なSQL文を含むテーブルルールを持っています。プロシージャを使用すると、特定のルール(計算)を表に適用できます。しかし、今私はそのテーブルにすべてのルールを(選択から)適用したい。カーソルを使用せずにこれを行う方法はありますか? まず、関数を使用しようとしました。しかし、それらは動的SQLを実行することはできません。だから私はプロシージャとカーソルで終わった。T-SQL - select文が必要なカーソルの行ごとに個別のプロシージャを実行しますか?

+0

あなたの質問が分かっていれば、クエリの結果ごとにストアドプロシージャを実行したいと思っていますか?もしそうなら、それはカーソルで行う必要があります(少なくとも私が知っている限り)。 – Siyual

+0

それは問題です。これらの手順がかなり頻繁に実行されるため、高速化のためのより高速なソリューションを見つけることを願っています。 –

+2

すべてのルールとプロシージャを含む動的な 'T-SQL'文を作成し、実行することができます。詳細を教えてください。あなたは何を持っていますか?テーブル名、手続き、いくつかのルール(入力パラメータ)? – gotqn

答えて

0

私が推測するところでは、ルールテーブルへのテキストがあります。 RuleID = 1、Rule = '(フィールド1 *フィールド2)+フィールド3'。したがって、実際にルールを適用するステートメントを作成するには、動的SQLに頼ることになります。あなたはそのテキストで何もできないので、十分に公正です。こうすれば、おそらくカーソルに頼らざるを得ず、すべての行でsql + executeをビルドする必要があります。 ルールが実際のステートメントに変換され、有効になっている場合は結合で適用することもできます。上記の例は次のようになります:

SELECT 
... 
,CASE WHEN RuleID = 1 THEN (field1*field2)+field3 ELSE NULL END AS Rule1Result 
FROM mytable JOIN rulestable ... 
関連する問題