2012-05-03 133 views
2

我尝试执行以下查询。它是运行报表所需的查询的起点:查询问题中的MySQL IF语句

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中运行。它表示在有或没有parens的情况下,“IF”有一个sytax错误,并不重要。

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

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

感谢

+0

要实现,让从开始究竟在那里做第一 – omoabobade

回答

2

您可以使用IF-THEN结构里面只有BEGIN ... END条款,只能在过程,函数,触发器使用和事件。在一个简单的脚本中使用它是不可能的。

对于你的情况我建议这一个 -

SELECT * FROM mytable WHERE @blah > 0; 
0

我看到else语句问题:

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

我没有设置无论如何,它可以是自己。 MSSQL的工作良好,所以我不会指望这是一个问题,因为我在顶部设置等等。 – Encryption

+0

我稍后修改了上面的代码。 –

+1

语法错误仍然存​​在于IF语句中 – Encryption

2
  1. 需要有一个过程或某种形式的脚本,需要执行给定的情况下。
  2. CALL程序方法需要在报告中的数据源发起在这样的情况下

    脚本可以写成以下方式:(注:程序可以有参数的要求)

    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()通过CALL XYZ()或根据需要传递给您的数据源或传递查询以执行生成报告的位置。

以下在MySQL Workbench上正常工作。 SELECT CASE如果不需要,可以从上述过程中删除查询。

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(); 
-1

我了解更多的SQL Server,那么它可能是我的回答是不是非常有帮助,但无论如何,这是我的帮助:

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

SELECT @blah = (CASE WHEN @fname IS NULL THEN 1 ELSE @blah END) 
-1

在我看来,当使用Sql服务器时,我发现变量不能在没有声明的情况下赋值。

我认为你必须完成:

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; 
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