我正在尝试执行以下查询。它是运行报告所需查询的起点:
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语句中评估变量/输入参数。
感谢任何帮助。 注意 - 如果我可以正确评估参数但我正在尝试任何可能的解决方案,则可能不需要SELECT CASE。
由于
答案 0 :(得分:2)
只能在BEGIN ... END子句中使用IF-THEN构造,该子句只能用于过程,函数,触发器和事件。不可能在一个简单的脚本中使用它。
对于你的情况,我建议这个 -
SELECT * FROM mytable WHERE @blah > 0;
答案 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
个查询。
答案 2 :(得分:0)
我看到了else语句的问题:
SELECT CASE WHEN @fname IS NULL THEN @blah = 1 END;
答案 3 :(得分: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();
答案 4 :(得分: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
答案 5 :(得分:-1)
我对SQL SERVER的了解更多,那么可能是我的回答不是很有帮助,但无论如何这里是我的帮助:
尝试更改下面的代码段,
SELECT @blah = (CASE WHEN @fname IS NULL THEN 1 ELSE @blah END)
答案 6 :(得分:-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;