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”存在语法错误,没关系。

我所需要的只是评估 IF 语句中的变量/输入参数的能力。

任何帮助表示赞赏。注意- 如果我可以让 IF 正确评估参数,则 SELECT CASE 可能不是必需的,但我正在尝试任何可能的解决方案。

谢谢

4

7 回答 7

2

您只能在 BEGIN...END 子句中使用 IF-THEN 构造,它只能在过程、函数、触发器和事件中使用。不可能在简单的脚本中使用它。

对于您的情况,我建议您这样做-

SELECT * FROM mytable WHERE @blah > 0;
于 2012-08-14T10:47:01.907 回答
2
  1. 需要有一个过程或某种形式的脚本需要在特定情况下执行。
  2. CALL此类场景需要在报表数据源中启动procedure方法

    脚本可以写成如下方式:(注: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

我看到 else 语句的问题:

SELECT CASE WHEN @fname IS NULL THEN @blah = 1 END;
于 2012-05-03T20:04:59.397 回答
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

不确定这是否对您有很大帮助,但您可以在 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 回答
-1

我对 SQL SERVER 了解更多,那么可能是我的回答不是很有帮助,但无论如何这里是我的帮助:

尝试更改下面的代码片段,

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

在我看来,当使用 Sql server 时,我发现变量不能在不声明的情况下赋值..

我认为您必须这样做:

declare @fname nvarchar(50)
declare @blah int

那么你必须为变量赋值。

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 回答