如果在SWITCH声明中存在

时间:2016-07-21 08:36:20

标签: sql sql-server stored-procedures switch-statement exists

我有以下代码不起作用。我想要做的是基于一些变量我必须检查该变量的所有位字段是否为真。如果是,则返回true,否则返回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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

CASE WHEN构造要求THEN部分后跟expression。您无法在其中添加语句,such as IFRETURN

相反,你应该在那里放置一个表达式,这样当SELECT语句对其进行评估并生成结果时,你可以使用那个值来执行更多语句,包括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)