如何比较 SQL 中的 smallint -1

How to compare smallint -1 in SQL

我正在尝试找出 status_id smallint 的字段值是否 -1 并获取该字段没有 -1 的记录。我的存储过程内容如下:

SELECT DISTINCT TOP 7
        cs.case_id,
        cs.status_id,
        cm.company_name, 
        cs.created_time,
        cs.severity_id,
        cs.last_updated_time,
        COALESCE(NULLIF(cs.priority,''), 'Medium') AS case_priority
    FROM 
        tblcase cs with (nolock)
        INNER JOIN tblcompany cm with (nolock) ON (cs.company_id=cm.company_id)

    WHERE 
        CONVERT(INT, cs.status_id) <> -1  AND
        (cs.cas_case_owner = @userId AND cs.is_notify_co = 1) OR
        (cs.activity_owner = @userId AND cs.is_notify_ao = 1)

    ORDER BY cs.severity_id DESC, cs.case_id ASC

我已经尝试了 CONVERT(int, cs.status_id) <> -1)cs.status_id <> CONVERT(smallint, -1)cs.status_id != CAST('-1' AS smallint) 等等,但我仍然不断地获取带有 -1 作为 status_id 的记录。在投票之前,请帮助我了解我做错了什么。

我想你忘记使用括号进行 OR 操作

cs.status_id <> -1 AND
     ( -- open
        (cs.cas_case_owner = @userId AND cs.is_notify_co = 1) 
        OR
        (cs.activity_owner = @userId AND cs.is_notify_ao = 1)
     ) -- close

在这里查看我的另一个回答 -

试试这个

SELECT DISTINCT TOP 7
        cs.case_id,
        cs.status_id,
        cm.company_name, 
        cs.created_time,
        cs.severity_id,
        cs.last_updated_time,
        COALESCE(NULLIF(cs.priority,''), 'Medium') AS case_priority
    FROM 
        tblcase cs with (nolock)
        INNER JOIN tblcompany cm with (nolock) ON (cs.company_id=cm.company_id)

    WHERE ISNULL(CAST(cs.status_id AS INT),0)<> -1 
        AND cs.is_notify_co = 1
        AND
        (
            cs.cas_case_owner = @userId 
            OR
            cs.activity_owner = @userId 
        )
    ORDER BY cs.severity_id DESC, cs.case_id ASC

试试这个:

SELECT DISTINCT TOP 7
        cs.case_id,
        cs.status_id,
        cm.company_name, 
        cs.created_time,
        cs.severity_id,
        cs.last_updated_time,
        COALESCE(NULLIF(cs.priority,''), 'Medium') AS case_priority
    FROM 
        tblcase cs with (nolock)
        INNER JOIN tblcompany cm with (nolock) ON (cs.company_id=cm.company_id)

        WHERE 
            (
              ( cs.status_id <> -1  AND cs.cas_case_owner = @userId) AND 
              ( (cs.is_notify_co = 1) OR (cs.is_notify_ao = 1))
            )

    ORDER BY cs.severity_id DESC, cs.case_id ASC