2016-11-17 6 views
-1

thenステートメントの1つに複数のアクションが含まれているSQLのcaseステートメントを作成しようとしています。これが可能で、この部分の(@ItemCountVariable = a.ItemCount + 10)がうまくいかないのかどうかはわかりませんが、これは私が達成しようとしているものです。複数のアクションを含むSQL Caseステートメント

DECLARE @ItemCountVariable INT = 0 
... 

WHEN MATCHED THEN 
UPDATE SET Name = a.Name, 
      [Description] = a.[Description], 
      ItemCount = 
      (CASE WHEN ((a.ItemCount + 10) < 20) 
        THEN a.ItemCount + 10 
        ELSE a.ItemCount, @ItemCountVariable = a.ItemCount + 10 
      END) 
... 
+1

あなたのステートメントは、 'CASE'の' END'が欠けていると間違っています。 '@ItemCountVariable = a.ItemCount + 10'で何をしたいかを正しく記述してください。 – Esty

+0

これは大文字小文字の表記であり、大文字小文字の表記ではありません。 – jarlh

答えて

1

jarlhがコメントに書いた通り、caseは式ではなく、式です。
これは、ケースが単一の値を返し、フロー制御要素として使用できないことを意味します。 は、詳細については、こちらをMSDN公式ドキュメントに関するcaseから関連qouteです:
SQL ServerはCASE式のネストの唯一の10のレベルを可能にし

備考(Iは、関連部分を太字にしました)。

CASE式を使用して、Transact-SQL文、文ブロック、ユーザ定義関数、およびストアドプロシージャの実行フローを制御することはできません。流れの制御方法のリストについては、Control-of-Flow Language (Transact-SQL).

+0

ちょうど思いました。 Zoharのリンクのおかげでこれはできません。 – Shegute

関連する問題