如何比较 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
我正在尝试找出 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