[英]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.