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への情報の欠落を避けたいと思います。
はい、ルールはありますが、それはできません。あなたの提案された解決策ではなく、実際の根底にある要件を説明し、代替案を提案することができます。 c.f. [XY問題とは何ですか?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 例:なぜでしょうか?SELECT CASE @チャージペイド1それはいつに支払われたのですか0それは '支払われなかった'でしょうか? –
Aditya、あなたは何を実際に達成しようとしていますか?選択ケースとIIFは手続き型コードではありません。彼らは評価のためだけです。おそらくあなたは何か他のことをしたいのですか?あなたは解決しようとしている問題を置くことができますか?正しいアプローチを支援することができますか? – cameront
@MartinSmith、そのちょうどここの擬似コード。基本的にそれは有料の条件に基づいています。私は他の番号を検証します。結果を変数に格納して、result = msgをアプリケーション画面に表示します。そしてそのコードでは、CTEを使用しているので、SELECTの直後に書く必要があります。そのため、この場合はBEGIN ... ENDブロックが必要です。ご理解頂けるとありがたいです? – Aditya