2016-03-25 11 views
-1

BEGIN...ENDブロックの下にT-SQLステートメントをグループ化するための規則はありますか?SQL ServerのBEGIN ... ENDブロック

CASEステートメントOR IIFステートメント内でBEGIN...ENDブロックを試してみると失敗します。

CASEの結果の下で実行したい操作が複数あるため、BEGIN...ENDブロックが必要です。

SELECT 
CASE @ChargePaid 
WHEN 1 THEN 
      BEGIN 
      SELECT 'Paid' 
      END 
WHEN 0 THEN 
      BEGIN 
      SELECT 'Not Paid' 
      END 
END 

OR

SELECT IIF(@ChargePaid > 0, BEGIN SELECT 'Paid' END , BEGIN SELECT 'Not Paid' END) 

EDIT:

IF @cond = 'First' 
WITH CTE AS (
      SELECT 'A missing' Result 
      UNION 
      SELECT 'B missing' Result 
      UNION 
      SELECT 'C missing' Result 
) 
SET @msg = SELECT Result from CTE 

IF @cond = 'Second' 
WITH CTE AS (
       SELECT 'A missing' Result 
       UNION 
       SELECT 'B missing' Result 
       UNION 
       SELECT 'C missing' Result 
) 
SET @msg = SELECT Result from CTE 

IF @ChargePaid = 0 
... 
Some code goes here to generate the message. 
Then I store the actual message into @msg variable. 
... 

In the end I store the @msg values (I trim the @msg if it requires) to the table. 

私が欲しいものは次のとおりです。

私は@ChargePaid条件を検証します。 もしそれが偽になるならば、コード&のストア最適化のためのさらなる処理を、@ msg変数\ tableへの情報の欠落を避けたいと思います。

+1

はい、ルールはありますが、それはできません。あなたの提案された解決策ではなく、実際の根底にある要件を説明し、代替案を提案することができます。 c.f. [XY問題とは何ですか?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 例:なぜでしょうか?SELECT CASE @チャージペイド1それはいつに支払われたのですか0それは '支払われなかった'でしょうか? –

+0

Aditya、あなたは何を実際に達成しようとしていますか?選択ケースとIIFは手続き型コードではありません。彼らは評価のためだけです。おそらくあなたは何か他のことをしたいのですか?あなたは解決しようとしている問題を置くことができますか?正しいアプローチを支援することができますか? – cameront

+0

@MartinSmith、そのちょうどここの擬似コード。基本的にそれは有料の条件に基づいています。私は他の番号を検証します。結果を変数に格納して、result = msgをアプリケーション画面に表示します。そしてそのコードでは、CTEを使用しているので、SELECTの直後に書く必要があります。そのため、この場合はBEGIN ... ENDブロックが必要です。ご理解頂けるとありがたいです? – Aditya

答えて

5

BEGIN/ENDデリミタプログラムステートメント

Transact-SQLステートメントのグループを実行できるように一連のTransact-SQLステートメントを囲みます。

CASEブロックの式です。

条件リストを評価し、複数の可能な結果式の1つを返します。

丸い穴に四角いペグをはめ込もうとしています。

+0

質問に編集を参照してください。あなたはそれを助けることができますか? + 1 – Aditya

関連する問題