2

実行しようとしている次のクエリがあります。これは、レポートを実行するために必要なクエリの開始点です。

SET @fname = 'Bob';
SET @blah = 0;

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 ELSE @blah END;


    IF (@blah > 0) THEN
       SELECT * FROM mytable
    END IF;

構文に問題があるようですが、理解できません。私は問題なくIFステートメントを使用して他のクエリを作成しました。これはSQLyogでもWorkbenchでも実行されません。「IF」に親子の有無にかかわらずsytaxエラーがあると書かれていますが、問題ではありません。

必要なのは、IFステートメントの変数/入力パラメーターを評価する機能だけです。

どんな助けでも大歓迎です。-IFにパラメーターを適切に評価させることができれば、SELECT CASEは必要ないかもしれませんが、可能な解決策を試していました。

ありがとう

4

7 に答える 7

2

IF-THEN 構文は、BEGIN...END 句内でのみ使用できます。これは、プロシージャ、関数、トリガー、およびイベントでのみ使用できます。単純なスクリプトでは使用できません。

あなたの場合、これをお勧めします-

SELECT * FROM mytable WHERE @blah > 0;
于 2012-08-14T10:47:01.907 に答える
2
  1. 場合によっては、実行する必要がある手順または何らかの形式のスクリプトが必要です。
  2. CALLこのようなシナリオでは、レポート データソースでプロシージャ メソッドを開始する必要があります。

    スクリプトは次のように記述できます: (注: PROCEDURE は必要に応じてパラメーターを持つことができます)

    DELIMITER ?
    CREATE PROCEDURE XYZ()
    BEGIN
    SET @fname = 'Bob';
    SET @blah = 1;
    
    SELECT CASE WHEN @fname IS NULL THEN  @blah = 0 ELSE @blah END;
    IF (@blah > 0) THEN
    SELECT * from mytable;
    END IF;
    END ?
    DELIMITER;
    

    次にCALL XYZ()、必要に応じてパラメーターを使用または使用せずにデータソースに渡すか、レポートを生成するために実行するクエリを渡す場所に渡すことができます。

以下は、MySQL Workbench で正しく動作します。SELECT CASE不要な場合は、上記の手順からクエリを削除できます。

于 2012-08-14T11:32:41.983 に答える
0

これが役立つかどうかはわかりませんが、SQL クエリで if ステートメントを使用できます

Select Blah.name,sum(Blah.quan) as SumofQuan,  IF(Blah.descr LIKE '%searchterm%', "FOUND", IF(Blah.descr ="x", "x", "The Rest")) as New_DECRIPTION
于 2013-01-04T20:34:54.420 に答える
0
// Using procedure getting result as per requirement

drop procedure abc;
DELIMITER // 
create procedure abc() 
begin 
declare fname varchar(10);
declare blah int; 

set fname = 'Bob'; 
set blah = 0;

if(fname IS not NULL) then
       SELECT * from studmaster; 
end if; 

end //
DELIMITER ;

//--comment--> for execute procedure
call abc();
于 2012-08-17T09:05:48.467 に答える
0

私はelseステートメントに問題があります:

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 END;
于 2012-05-03T20:04:59.397 に答える
-1

SQLサーバーを使用しているときの私の見解では、変数は宣言せずに値を割り当てることができないことがわかりました。

私はあなたが次のようにしたに違いないと思います:

declare @fname nvarchar(50)
declare @blah int

次に、variablに値を割り当てる必要があります。

SET @fname = 'Bob'
SET @blah = 0

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 ELSE @blah END;


IF (@blah > 0) THEN
   SELECT * FROM mytable
END IF;
于 2012-08-17T15:35:34.283 に答える
-1

私はSQL SERVERについてもっと理解しています。私の答えはあまり役に立たないかもしれませんが、とにかくここに私の助けがあります:

以下のコード スニペットを変更してみてください。

SELECT @blah = (CASE WHEN @fname IS NULL THEN 1 ELSE @blah END)
于 2012-08-17T12:17:36.683 に答える