2017-04-18 153 views
0

我執行下面的存儲過程返回0值不返回預期的值:存儲過程

CREATE PROCEDURE [dbo].[sproc_tblBook_DisplayReservations] 

@bor_id varchar (9) 

AS 
    SELECT bor_id, isbn, bk_author, bk_title, 
      cop_loan_type, cop_status, res_date 

    FROM tblBook, tblReservation, tblCopy, tblBorrower 

    WHERE 
    tblReservation.res_cleared_date = NULL 
    AND 
    tblBook.isbn = tblReservation.fk1_isbn 
    AND 
    tblBook.isbn = tblCopy.fk1_isbn 
    AND 
    tblBorrower.bor_id = tblReservation.fk2_bor_id 
    AND 
    bor_id = @bor_id; 
RETURN 0 

期望的結果,當然,是它示出了匹配那裏的條件標準哪些記錄。
這樣的記錄存在,但他們沒有顯示。
我確定我的語法正確,所以我完全和完全難住。
一目瞭然,如果你有建議,請告訴。
我已經在這裏鏈接我的程序,任何人都需要仔細觀察。
不幸的是,我認爲這對於幫助我解決這個問題非常重要,但是如果有人讀到這一點,非常感謝。
下面的鏈接是我的計劃,我在Visual Studio中工作(.zip文件 - 隨時升級,如果有必要的.mdf文件/ SQL服務器): http://s000.tinyupload.com/index.php?file_id=07002279584481194620

請,如果你有時間,下載我的程序,看看你是否能找到問題!

+3

*不要*的'FROM'子句中使用逗號。 *總是*使用正確的,明確的'JOIN'語法。 –

+0

同意。按原樣解釋代碼也有點困難。爲每個表使用別名,並明確限定每個字段。例如:'從tblBook b'選擇b.author。我個人偏向於左連接,但這只是我在處理數據方面的偏好,在這裏可能更適合其他類型。 FROM子句中的逗號雖然對所有內容都做了大量的加入,但這不是你想要的。 – SandPiper

+0

標記使用的dbms,該代碼是產品特定的。 – jarlh

回答

2

更改tblReservation.res_cleared_date = NULLtblReservation.res_cleared_date IS NULL。在Sql中,沒有什麼等於null,甚至沒有其他的null。
還可以更改隱式連接,以顯式連接:

CREATE PROCEDURE [dbo].[sproc_tblBook_DisplayReservations] 

@bor_id varchar (9) 

AS 
    SELECT bor_id, isbn, bk_author, bk_title, 
      cop_loan_type, cop_status, res_date 
    FROM tblBook 
    INNER JOIN tblReservation ON tblBook.isbn = tblReservation.fk1_isbn 
    INNER JOIN tblCopy ON tblBook.isbn = tblCopy.fk1_isbn 
    INNER JOIN tblBorrower ON tblBorrower.bor_id = tblReservation.fk2_bor_id 
    WHERE tblReservation.res_cleared_date IS NULL 
    AND bor_id = @bor_id; 
RETURN 0