【问题标题】:SQL can you put an if statement in a select procedure?SQL 你可以在选择过程中放置​​一个 if 语句吗?
【发布时间】:2013-02-22 15:49:17
【问题描述】:

我需要在我的过程中添加一个 if 语句,就像这样

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 语句?

非常感谢

【问题讨论】:

    标签: sql stored-procedures if-statement procedure


    【解决方案1】:

    你可以这样做:

    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))
       )
    

    【讨论】:

    • @user712027 -- np,很高兴我们能帮上忙!
    【解决方案2】:

    只是为了提供一个替代答案(因为我认为 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
        )
    

    【讨论】:

      【解决方案3】:

      试试这个

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 2011-04-02
        • 1970-01-01
        • 2013-02-22
        • 2021-04-04
        相关资源
        最近更新 更多