2014-09-01 38 views
0

我嘗試在sql中執行類似c#的切換或者如果使用不同的條件。CASE然後當子查詢

我使用,但它不會在所有的工作:

它是一個存儲過程:

CREATE PROCEDURE [dbo].[Mystoredprocedure] 
@Value INT 
AS 
BEGIN 

     SET NOCOUNT ON; 
CASE 

WHEN @Value = 0 
THEN SELECT * FROM mytable1 


WHEN @Value = 1 
THEN SELECT * FROM mytable2 

WHEN @Value = 2 
THEN SELECT * FROM mytable3 

END 

但它不工作,我搜索的例子,但我不覺得有什麼我真的想要。

我嘗試過:

CREATE PROCEDURE [dbo].[Mystoredprocedure] 
    @Value INT 
    AS 
    BEGIN 
      SET NOCOUNT ON; 

    IF @Value = 0 
    BEGIN 
     SELECT * FROM MyTable1 
    END 

    ELSE IF @Value = 1 
    BEGIN 
     SELECT * FROM MyTable2 
    END 

    ELSE IF @Value = 2 
    BEGIN 
     SELECT * FROM Mytable3 
    END 

END 

有您的解決方案,以解決這個問題?謝謝 !

+1

你對'if'解決方案有什麼問題? – 2014-09-01 12:46:19

+0

它說,如果 – Julien698 2014-09-01 12:51:57

+1

「CASE」是T-SQL是**表達式,那麼它之前會有一個systax錯誤** - 它可以返回幾個值之一。但它是** NOT **像C#中的流程控制語句 - 您需要使用「IF ... THEN ....」此 – 2014-09-01 12:58:34

回答

1

我建議你試試這個:

CREATE PROCEDURE [dbo].[Mystoredprocedure] (@Value INT) 
AS 
BEGIN 

    IF @Value = 0 
     BEGIN 
      SELECT * FROM mytable1 
     END 
    ELSE IF @Value = 1 
     BEGIN 
      SELECT * FROM mytable2 
     END 
    ELSE IF @Value = 2 
     BEGIN 
      SELECT * FROM mytable3 
     END 

END 

如果我得到這個權利,問題是,你有你的查詢一個變量,但你不值傳遞給它。你聲明它,它是空的。有了這樣一來,如果調用查詢

EXEC [dbo].[Mystoredprocedure] 1 

應該從MYTABLE 2選擇等

+0

感謝您的回答,但它說有語法錯誤CASE和每當WHERE – Julien698 2014-09-01 12:55:45

+0

@ Julien698我已更新您的答案。當你在SELECT語句中時,使用CASE WHEN''''。正常的''''IF ... ELSE'''條件可以用於特效等。 – 2014-09-01 13:01:39

+0

那個好的代碼,但它不能和else一起工作,我要把它放在每個地方而不是「else如果「爲其他條件 – Julien698 2014-09-01 13:04:48

0

最後我找到了解決辦法,這很容易。我只是刪除其他之前,如果它工作!

CREATE PROCEDURE [dbo].[MystoredProcedure] 
(@Value INT) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 



IF @Value = 0 
BEGIN 
    SELECT * FROM mytable1 
END 

IF @Value = 1 
BEGIN 
    SELECT * FROM mytable2 
END 

IF @Value = 2 
BEGIN 
    SELECT * FROM mytable3 
END 

IF @Value = 3 
BEGIN 
    SELECT * FROM mytable4 
END 

END