IF EXISTS 在 SWITCH 语句中

IF EXISTS in SWITCH statement

我的以下代码不起作用。我想做的是基于一些变量,我必须检查该变量的所有位字段是否为真。如果是,return true 否则 return false.

有什么建议吗?

 DECLARE @var NVARCHAR(20);

IF EXISTS (SELECT variable FROM Table1  WHERE IDNO=@IDNO)
BEGIN
   SELECT @var=variable FROM Table1 WHERE IDNO=@IDNO
   SELECT CASE @var 
     WHEN 1 THEN
      IF EXISTS(SELECT CheckFlag FROM Table2  INNER JOIN Table1 ON Table2.IDNO=Table1.IDNO WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and Table1.IDNO=@IDNO)
       RETURN 1
      ELSE 
       RETURN 0
     WHEN 2 THEN
      ......
    ELSE -1
END

提前致谢。

CASE WHEN 构造要求 THEN 部分后跟 expression. You cannot put statements there, such as IFRETURN

相反,您应该在此处放置一个表达式,以便当 SELECT 语句对其求值并产生结果时,您可以使用 that 值来执行进一步声明,包括 IFRETURN.

所以你可以替换这个:

SELECT CASE @var 
    WHEN 1 THEN
        IF EXISTS(SELECT CheckFlag FROM Table2  INNER JOIN Table1 ON Table2.IDNO=Table1.IDNO WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and Table1.IDNO=@IDNO)
            RETURN 1
        ELSE 
            RETURN 0

使用 RETURN 语句从 SELECT 获取返回值,还使用 ​​CountSign 函数生成 0 或 1 值:

RETURN SELECT CASE @var 
        WHEN 1 THEN
           (SELECT     Sign(Count(*)) 
            FROM       Table2 
            INNER JOIN Table1 
                    ON Table2.IDNO=Table1.IDNO 
            WHERE      [Check1]=1 and [Check2]=1 and [Check3]=1 and Table1.IDNO=@IDNO)