簡體   English   中英

如何在存儲過程查詢中使用IF條件

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

然后使用條件來檢查,如果typeeNULL或不

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM