2013-02-22 90 views
0

我需要一个if语句添加到我的过程中,这样的事情SQL你可以把一个if语句放在select过程中吗?

CREATE PROCEDURE [dbo].[myProcedure] 
    @name VARCHAR(8000) = NULL 
,@lname VARCHAR(8000) = NULL 
,@flag CHAR(1) = NULL 


AS 
BEGIN 
SET NOCOUNT ON; 
    WITH t 
    (name 
    ,lname 
    ) 

AS 
(
    SELECT DISTINCT 
    * FROM mytable 
    WHERE 
    (@name IS NULL OR @name = name) 
    IF @flag = 'c' 
    BEGIN 
     AND (@lname IS NULL OR @lname = 'Doe') 
    END 
    ELSE 
    BEGIN 
    AND (@lname IS NULL OR @lname = lname) 
    END 
) 

正如你可以根据我使用这种或那种方式将lname领域的标志见。 我在if部分收到错误..是不是我在这里不能使用if语句? 如果不是,我该如何替换if语句?

非常感谢

回答

2

你可以这样说:

SELECT DISTINCT * 
FROM mytable 
WHERE 
    (@name IS NULL OR @name = name) 
    AND 
    (
     (@flag = 'c' AND (@lname IS NULL OR @lname = 'Doe')) 
     OR 
     (@flag != 'c' AND (@lname IS NULL OR @lname = lname)) 
    ) 
+0

工作得很好,谢谢你教我! – user712027 2013-02-22 16:11:01

+0

@ user712027 - np,很高兴能帮到你! – sgeddes 2013-02-22 16:15:57

0

只是提供一个备用的答案(因为我觉得一个CASE语句是真正的模拟到SQL IF语句):

SELECT 
DISTINCT 
    * 
FROM 
    mytable 
WHERE 
    (@name IS NULL OR @name = name) 
    AND 
    (@lname is NULL OR @lname = 
    CASE 
     WHEN @flag ='c' THEN 'Doe' 
     ELSE lname 
    END 
    ) 
0

试试这个

.... 
WHERE 
(@name IS NULL OR @name = name) AND 
(
    (@flag = 'c' AND (@lname IS NULL OR @lname = 'Doe')) OR 
    (@lname IS NULL OR @lname = lname) 
) 
相关问题