2012-05-03 179 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