Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql WHERE子句返回错误的情况_Sql_Sql Server - Fatal编程技术网

Sql WHERE子句返回错误的情况

Sql WHERE子句返回错误的情况,sql,sql-server,Sql,Sql Server,我正在运行以下代码: SELECT hID FROM logonsHistory WHERE aIDs NOT LIKE '%''101''%' AND CASE src WHEN 0 THEN uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481) END 我得到这个错误: 关键字“IN”附近的语法不正确 我不知道出了什么问题。case语句的when部分

我正在运行以下代码:

SELECT hID 
  FROM logonsHistory
 WHERE aIDs NOT LIKE '%''101''%' AND
 CASE src 

WHEN 0 THEN 

uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481) 

END
我得到这个错误:

关键字“IN”附近的语法不正确

我不知道出了什么问题。

case语句的when部分应该选择一个值。你要做的是检查一个条件

或者,如果您正在检查这些值中的uid,您应该这样做

 case when src = 0 then
                        case when uID IN (29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)
                        then 'It is a Client ID'
                        -- add another when or else part here if required
                        end
 else 'Not a UID and not a Client ID'
 end

听起来你不需要用例,请测试一下

SELECT hID
  FROM logonsHistory
 WHERE aIDs NOT LIKE '%''101''%'
       AND ( (src = 0 --scr is 0 => must have uid in the list
              AND UID IN (29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481))
            OR src <> 0) --else src is not 0 and there is no additional condition

我怀疑你的情况不太好。你一个人测试过吗?

我猜这就是你想要的

WHERE aIDs NOT LIKE '%''101''%' or
( 
src = 0 
AND
uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481
) 
在这种情况下,案例陈述不合适。只需使用一个简单或条件:

SELECT hID 
  FROM logonsHistory
 WHERE aIDs NOT LIKE '%''101''%'
 AND (
    src <> 0 -- add a COALESCE here if src can be NULL
    OR uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481) 
 )

。。。这基本上相当于仅在src=0时应用uID过滤,这似乎是您试图通过查询实现的。

您的语句似乎格式不正确。当0时,您放置了一个条件而不是一个要设置的值,然后。。。。。。结束


29,41,42,45,49,50,57,73,83107166349356367375376416471472473474474481中的uID有一个条件,不应该在那里

对吧。。。因为这些数字代表客户ID。当src=0 Clients表时,则为uID INclientIDs。如果src是其他东西,那么它不是uID,也不是clientID。。那很好用。当我添加这个案例时,一切都爆炸了,你需要使用这个案例吗?或者这是你的要求?当src不是0时会发生什么,它不会忽略它吗?它是什么?我在anwser中添加注释。请看一下。我想说的是CASE src 0,然后做一个和uID IN。那我该怎么做?这就是你想做的吗?嵌套大小写?这或多或少是正确的。但是,如果src为null,则除非uID具有match@t-克劳森:同意。这完全取决于src是否允许空值。在这种情况下,需要额外小心一点。