2013-09-30 20 views
-3

你好,我想在存储过程中使用一个或语句,但它不工作,我想它的工作方式......如何使用或语句是存储过程

的第一部分语句是完美执行的,但似乎在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; 
+3

检查您的操作顺序。我怀疑你想用圆括号包围你的OR子句。 –

+0

要详细说明@ RobertHarvey的评论,请查看http://technet.microsoft.com/en-us/library/ms186992(v=sql.105).aspx – Mureinik

+0

这不是存储过程...这是一个单一的查询! – Barranka

回答

3

在SQL Server中,并且优先于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') 

你不应该混合,并使用或不使用括号甚至如果操作的顺序是正确的,因为这可以让代码的维护者知道你的意图,并且这不是错误。

您也有可能意外的交叉连接问题。

所以不是

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 

使用第一,如果记录需要在两个如果您想要在AssignEquiment中没有相关记录的设备的记录,则选择第二个。

+0

谢谢你帮助我......我只是第二年的开发人员, ...因此,我的知识还是不如一些...我忘了参加两个表:(这是问题......但非常感谢你指出了我!!!我感谢帮助 –

0

你wrotten查询手段的条件是

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

你需要把状态这样用括号

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