2016-10-26 7 views
1

を働いていない、私は次のクエリを作成:私は著者や支店名の本のコピーの量のために検索することができますプロシージャを作成したかったので、私はこれを作成し、このクエリからパラメータ

SELECT Title, sum(No_Of_Copies) as 'Total Copies' 
    FROM BOOK_COPIES bc 
    join BOOK_AUTHORS ba 
    on bc.BookId=ba.BookId 
    join BOOK b 
    on b.BookId=bc.BookId 
    join LIBRARY_BRANCH lb 
    on bc.BranchId=lb.BranchId where AuthorName='George Orwell' and BranchName='Central' 
    group by b.Title 

を:

CREATE PROC GetTotalCopies @AuthorName varchar(100), @BranchName varchar(100) 
    AS 

     SELECT Title, sum(No_Of_Copies) as 'Total Copies' 
     FROM BOOK_COPIES bc 
     join BOOK_AUTHORS ba 
     on bc.BookId=ba.BookId 
     join BOOK b 
     on b.BookId=bc.BookId 
     join LIBRARY_BRANCH lb 
     on bc.BranchId=lb.BranchId where AuthorName='@AuthorName' and BranchName='@BranchName' 
     group by b.Title 

しかし、著者名と支店名で実行すると空のテーブルが表示されます。誰でも知っている理由は? 私は、次のフローチャートからこのデータベースを作成: https://www.learncodinganywhere.com/learningmanagementsystem/links/07_DB/SQL_Drill.pdf パラメータの周り単一引用符にを削除するSQL Server 2008の

答えて

3

一重引用符は必要ありません。引数はすでに文字列です。

ので、このようなクエリを記述します。

where AuthorName = @AuthorName and BranchName = @BranchName 

注:句は「wasn最初のいくつかの理由

where (AuthorName = @AuthorName or @AuthorName is null) and 
     (BranchName = @BranchName or @BranchName is null) 
+0

:あなたは、「すべての値」として機能引数を検討する必要があります文字列を使わなくても作業できます。しかし、あなたが私に与えた2番目のwhere節は素晴らしい作品です!ありがとうございました! –

2

を使用します。パラメータは文字列リテラルとして作成されます。パラメータは文字列型ですが、パラメータは評価時に一重引用符を必要としません。

where [email protected] and [email protected]