Sql server 如何模拟多个IF检查?

Sql server 如何模拟多个IF检查?,sql-server,Sql Server,我有以下代码: IF (@TestStatusId = @MarkedByUser) BEGIN DECLARE @NOOP1 BIT; END ELSE BEGIN DECLARE @NOOP2 BIT; END 我想有三个条件。当@TestStatusId=@MarkedByUser、@TestStatusId=@MarkedByAdmin时,@TestStatusId为其他内容时为默认值 有没

我有以下代码:

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

使用@Vladimir建议的嵌套IFs

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

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

由于缺少关于需要实现什么的更多细节,这里有一个非常简单的示例,说明如何使用动态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

我希望对您的问题的进一步解释能让我消除所有这些,并提出更好的策略。

您希望在每种情况下发生什么?声明不同的变量?或者使某些变量具有不同的值?我希望有运行的代码来替换那些声明,只需将它们放在那里,使问题简短。如果,很可能必须使用多个(可能是嵌套的)
CASE
是具有单一类型的单一结果的单一表达式,您不能将此类代码放入
CASE
中。但在其余代码中会发生什么?它使用哪个变量?或者您是否计划在其他地方重复这些
,创建动态SQL?如果你详细描述整个场景,也许有更好的选择。@alan,这是一种奇怪的方法。你想完成什么?以后不能检查变量是否存在——代码将失败,仅此而已。