1

次のストアド プロシージャを実行しようとすると、エラーが返されます。

EXECUTE p_someProc
--list of vars
CASE WHEN @var1=1 AND @var2=1 THEN 3 
     WHEN @var2=1 THEN 2 
     WHEN @var1=1 THEN 1 END,
--more vars

他にも CASE 関数が含まれていますが、最初の CASE を指すエラーが 1 つだけ吐き出されます。

同じ式が PRINT 関数内で実行されると、期待される結果が返されます。

declare @var1 bit set @var1 = 1
declare @var2 bit set @var2 = 1

print(CASE WHEN @var1=1 AND @var2=1 THEN 3 
     WHEN @var1=1 THEN 2 
     WHEN @var2=1 THEN 1 END)

出力は「3」です

どういうわけかCASE関数を誤用していると思います。誰かが回避策またはそれを修正する方法を考えることができますか?

前もって感謝します。

――スタン

4

2 に答える 2

1

JeremyMcGee が上で暗示しているように、ケースを exec に渡そうとするのではなく、割り当てを実行する必要があります。次のようなことを試してください。

Declare @varx int
select @varx = CASE WHEN @var1=1 AND @var2=1 THEN 3 
     WHEN @var2=1 THEN 2 
     WHEN @var1=1 THEN 1 END
EXECUTE p_someProc @varx
于 2009-12-04T06:52:01.897 に答える
1

コードを追加せずに見分けるのは困難です。@var1 と @var2 が宣言されていることを確認してください。

CASE の結果も何かに割り当てていることを確認してください。

于 2009-12-04T06:44:25.877 に答える