[英]How to use IF condition in Stored Procedure Query
这是我的存储过程查询。 如果typee存在,则应在其中添加第二个条件,也可以不添加。 我的表结构是这样的
|id | name | typee |is_primary|
|1 |IND |0 |1 |
|2 |SRIL |1 |0 |
我的存储过程查询如下
CREATE DEFINER=`root`@`localhost` PROCEDURE `testIfCondition`(IN countryId int(11),IN typee INT(11),IN is_primary INT(11),
out name VARCHAR(50))
BEGIN
select name from country where id = id
if typee != 0 then
and typee= typee
end if;
if is_primary !=0 then
and primary = primary
end if;
END
在上面的查询中,曾经有值的查询必须执行。 如果有人知道,请帮助我。 当我尝试它给一些语法错误。 请告诉我正确的语法来解决我的问题。
提前致谢 !!!!
我认为您不能使用IF
语句添加更多条件。 您可能会选择两次或更多次并将其添加到temporary table
,例如:
首先创建temporary table
DECLARE @tempTable TABLE (
ID INT,
Name NVARCHAR(250),
Typee INT
)
然后将第一个SELECT
结果插入@tempTable
INSERT INTO @tempTable
SELECT * FROM country WHERE id = countryId
然后使用条件来检查,如果typee
为NULL
或不
IF typee IS NOT NULL AND is_primary IS NOT NULL THEN
SELECT * FROM @tempTable WHERE typee = typee AND is_primary = is_primary
ELSE IF typee IS NOT NULL THEN
SELECT * FROM @tempTable WHERE typee = typee
ELSE IF is_primary IS NOT NULL THEN
SELECT * FROM @tempTable WHERE is_primary = is_primary
ELSE
SELECT * FROM @tempTable
END
尽管我认为这不是最佳做法。
根据此处的另一个答案,您可以先将query
创建为字符串,然后执行query
。 您的sp
应该如下所示:
CREATE DEFINER=`root`@`localhost` PROCEDURE `testIfCondition`(IN countryId int(11),IN typee INT(11),IN is_primary INT(11),
out name VARCHAR(50))
BEGIN
SET @query = CONCAT('select name from country where id = ', countryId);
if typee <> 0 then
SET @query = CONCAT(@query, ' AND typee = ', typee);
end if;
if is_primary <> 0 then
SET @query = CONCAT(@query, ' AND is_primary = ', is_primary);
end if;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
您可以在此处查看从字符串执行查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.