2017-04-18 7 views
0

ich die folgende gespeicherte Prozedur ausgeführt wird, die 0-Werte zurückgibt:Gespeicherte Prozedur nicht erwarteten Werten Rückkehr

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 

Das gewünschte Ergebnis ist natürlich, dass es Aufzeichnungen zeigt, welche die, wo die Bedingungen Kriterien entsprechen.
Solche Datensätze existieren, sie werden jedoch nicht angezeigt.
Ich bin sicher, dass meine Syntax korrekt ist, also bin ich völlig und völlig ratlos.
Auf einen Blick, wenn Sie Vorschläge haben, bitte erzählen.
Ich habe mein Programm hier verlinkt, sollte jemand genauer hinschauen wollen.
Unglücklicherweise denke ich, dass das sehr wichtig ist, um mich bei diesem Problem zu unterstützen, aber ich danke Ihnen allen, sollte jemand dies lesen.
Der folgende Link ist mein Programm, das ich arbeite in Visual Studio (ZIP-Datei - fühlen Sie sich frei, den MDF-Datei/SQL-Server bei Bedarf zu aktualisieren): http://s000.tinyupload.com/index.php?file_id=07002279584481194620

Bitte, wenn Sie Zeit haben , lade mein Programm herunter und finde heraus, ob du das Problem finden kannst!

+3

* nie * Kommas in der 'FROM' Klausel:
Auch die impliziten in die explizite Join ändern. * Verwenden Sie immer die richtige explizite 'JOIN'-Syntax. –

+0

Einverstanden. Es ist auch eine kleine Herausforderung, Ihren Code so zu interpretieren, wie er ist. Verwenden Sie Aliase für jede Ihrer Tabellen und qualifizieren Sie jedes Ihrer Felder explizit. Bsp .: 'wähle b.author aus tblBook b'. Ich bin persönlich Teilhaber an LEFT JOINS, aber das ist nur meine Vorliebe, wie ich Daten verarbeiten kann, gibt es andere Arten, die hier besser geeignet sind. Die Kommas in Ihrer FROM-Klausel machen jedoch einen riesigen vollständigen Join für alles, und das ist nicht das, was Sie wollen. – SandPiper

+0

Markieren Sie die verwendeten dbms, dieser Code ist produktspezifisch. – jarlh

Antwort

2

Ändern tblReservation.res_cleared_date = NULL zu tblReservation.res_cleared_date IS NULL. In Sql ist nichts gleich Null, nicht einmal eine weitere 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 
Verwandte Themen