如何以更好的方式执行不同的条件

时间:2015-08-22 08:20:35

标签: sql sql-server-2012

我编写了一个存储过程来从我的应用程序的表中获取数据。现在我需要使用另一个条件查询相同的列。我使用IF ELSE来解决我当前的存储过程就是这个问题的问题

ALTER PROCEDURE [dbo].[sample]
      @flag INT=1 
AS
BEGIN 
    SET NOCOUNT ON;  

    IF(@flag = 1)
    BEGIN
        SELECT 
            item1, item2, item3
        FROM 
            table1 
        WHERE 
            (my first condition)
    END
    ELSE
    BEGIN
        SELECT 
            item1, item2, item3
        FROM 
            table1 
        WHERE 
            (my second condition)
    END
END

当前的存储过程工作正常,但如果我需要另一列或者我需要删除一列它很脏,我必须这样做两次。

有没有办法优化这个存储过程?我是SQL的新手,这是我的第一个存储过程。请帮忙

2 个答案:

答案 0 :(得分:2)

你可以这样:

SELECT item1,item2,item3
FROM table1
WHERE 
  (@flag = 1 and 'my first condition') OR
  (@flag != 1 and 'my secondcondition')

答案 1 :(得分:0)

您可以使用CASE

SELECT item1, item2, item3
FROM table1
WHERE 
   CASE 
       WHEN @flag = 1 AND 'my first condition' THEN 1
       WHEN @flag != 1 AND 'my second condition' THEN 1
   END = 1