2013-09-30 44 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')