我如何使用OR Statement是一个存储过程

时间:2013-09-30 20:49:02

标签: sql sql-server stored-procedures

您好我正在尝试在存储过程中使用OR语句,但它不能按我希望的方式工作...

声明的第一部分是完美执行的,但似乎在OR之后所说的内容被忽略了......我认为它们必须是另一个用来代替OR的词?

希望我在这听起来不傻。

这是我的存储过程:

SELECT DISTINCT Equipment.EquipmentNo, Equipment.EquipmentDescription AS [Description], Equipment.Barcode, Equipment.SerialNo AS [Serial Number], Equipment.Status
FROM Equipment, AssignEquipment
WHERE (Equipment.Status = 'Open' AND Equipment.Assigned = 'No') OR AssignEquipment.Assigned = 'No'
AND Equipment.EquipmentNo = AssignEquipment.EquipmentNo;

2 个答案:

答案 0 :(得分:3)

在SQL Server中,AND优先于OR。所以你写的相当于:

WHERE (Equipment.Status = 'Open' AND Equipment.Assigned = 'No') OR AssignEquipment.Assigned = 'No'

如果这就是你想要的那么好,但你可能有意:

WHERE Equipment.Status = 'Open' AND (Equipment.Assigned = 'No' OR AssignEquipment.Assigned = 'No')

即使操作顺序正确,也不要在不使用括号的情况下混合使用AND和OR,因为这样可以让代码的维护者知道你的意图并且这不是一个错误。

您还遇到交叉连接问题,这可能是偶然的。

所以而不是

FROM Equipment, AssignEquipment

您可能想要内部联接或左联接

FROM Equipment E
JOIN AssignEquipment AE ON AE.EquipmentNo = E.EquimentNo

或者

FROM Equipment E
LEFT JOIN AssignEquipment AE ON AE.EquipmentNo = E.EquimentNo

如果记录需要在两个表中,则使用第一个;如果你想在equiment中的记录在AssignEquiment中没有相关记录,则使用第二个。

答案 1 :(得分:0)

您编写的查询意味着条件

 WHERE ( Equipment.Status = 'Open' AND Equipment.Assigned = 'No') OR  AssignEquipment.Assigned = 'No'

你需要用括号放置这样的条件

WHERE Equipment.Status = 'Open' AND (Equipment.Assigned = 'No' OR AssignEquipment.Assigned = 'No')