3

列ID (int)、論理式(varchar)、および結果(bit)を含むテーブルがあります。論理式は、結果を評価して結果列に入れる必要がある varchar に格納されます。たとえば、列には次を含めることができます。

'1=1'
'2<3 AND 1^1=1'
'3>4 OR 4<2'

結果列には次が含まれる必要があります

1
0
0

現在、カーソルを使用して行をナビゲートし、動的SQLを使用して式を評価しています。

"IF(" + @expression + ") SET @result = 1" 

これを行うためのより良い、より効率的な方法はありますか? 理想的には、カーソルを取り除きたいです。何か案は?これは、アセンブリを使用して実行したほうがよいでしょうか?

4

2 に答える 2

2

私はCLRを使います。

私はここに非常によく似た答えを投稿しました:式を含む文字列を10進数に変換します

実際、上記の答えは、(およびその他の単純な式)に対して変更なしで正常に機能します。

SELECT dbo.eval('1=1' )
SELECT dbo.eval('3>4 OR 4<2' )

ただし、^(caret)演算子を使用する場合は失敗します。ビット単位のXORを処理するには、CLRを微調整する必要があります。

于 2012-04-26T16:35:00.337 に答える
1

少し前に、1+2+3+4/(5-2) のような中置算術式を評価して 10 進数の結果を得るために、SQL でユーザー定義関数を作成しました。コードはこちらです。おそらく、ブール式で機能するように適応させることができます。これは、Sequence0_8000 と呼ばれる整数のテーブルを使用します。これは、任意の方法で設定できます。

于 2012-04-28T05:22:47.110 に答える