2014-09-01 80 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