如何模拟多个IF检查?

时间:2016-03-09 00:49:42

标签: sql-server

我有这段代码:

IF (@TestStatusId = @MarkedByUser) 
   BEGIN
      DECLARE @NOOP1 BIT;
   END
   ELSE
   BEGIN                    
      DECLARE @NOOP2 BIT;
   END

我想有三个条件。当@TestStatusId = @MarkedByUser时,@ TestStatusId = @MarkedByAdmin,当@TestStatusId是其他东西时的默认值。

有没有办法可以在没有多重IF检查的情况下做到这一点?

这是我想要的,但语法似乎不合适:

CASE @TestStatusId
WHEN @MarkedByAdmin THEN BEGIN DECLARE @NOOP1 BIT; END
WHEN @MarkedByUser THEN BEGIN DECLARE @NOOP2 BIT; END
ELSE DECLARE @NOOP3 BIT;
END

2 个答案:

答案 0 :(得分:0)

使用@Vladimir

建议的嵌套IF
IF (@TestStatusId = 0) 
BEGIN
  -- CODE FOR NOOP1
  PRINT 0
END
ELSE IF (@TestStatusId = 1) 
BEGIN
  -- CODE FOR NOOP2
  PRINT 1
END
ELSE
BEGIN
  -- CODE FOR NOOP3
  PRINT 2
END

答案 1 :(得分:0)

我真的不喜欢这种做法;当您声明不同的变量时,其余代码应重复这些IF以避免使用未声明的变量。

由于缺乏您需要实现的更多细节,这里有一个非常简单的示例,说明如何使用动态SQL执行操作,而无需重复代码。

DECLARE @DynSQL NVARCHAR(100)
DECLARE @Variable NVARCHAR(10)

SELECT @Variable = CASE @TestStatusId WHEN @MarkedByAdmin THEN '@NOOP1' WHEN @MarkedByUser THEN '@NOOP2' ELSE '@NOOP3' END

SET @DynSQL = 'DECLARE ' + @Variable + ' BIT; SET ' + @Variable + ' = 1; SELECT ' + @Variable + ';'

EXEC sp_executesql @DynSQL

我希望对您的问题的进一步解释将允许我删除所有这一建议更好的策略。